import warnings
warnings.filterwarnings('ignore')
import pandas as pd #library for data manipulation and analysis
import numpy as np #library used for working with arrays
import matplotlib.pyplot as plt #library for plots and visualizations
import seaborn as sns #library for visualizations
from scipy.stats import norm #using normal distibutions
from scipy.stats import zscore
# to create k folds of data and get cross validation score
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
# Import Linear Regression machine learning library
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.metrics import r2_score
# To oversample and undersample data
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import RandomUnderSampler
###Heirarchical CLustering and PCA
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import cophenet, dendrogram, linkage
from scipy.spatial.distance import pdist #Pairwise distribution between data points
from sklearn.decomposition import PCA
from scipy.stats import zscore
#Deeplearning
import pandas as pd
import numpy as np
import keras
from tensorflow.keras.utils import to_categorical
import warnings
warnings.filterwarnings('ignore')
from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
# import torch
# import torchvision
# import numpy as np
# import matplotlib
# import matplotlib.pyplot as plt
# import torch.nn as nn
# import torch.nn.functional as F
# from torchvision.datasets import MNIST
# from torchvision.transforms import ToTensor
# from torchvision.utils import make_grid
# from torch.utils.data.dataloader import DataLoader
# from torch.utils.data import random_split
# %matplotlib inline
# # Use a white background for matplotlib figures
# matplotlib.rcParams['figure.facecolor'] = '#ffffff'
#Neural Networks
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn import model_selection
from sklearn.compose import ColumnTransformer
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.impute import SimpleImputer
import warnings
from sklearn.metrics import confusion_matrix
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import RandomizedSearchCV
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dense, Input, Dropout,BatchNormalization
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
import random
from tensorflow.keras import backend
random.seed(1)
np.random.seed(1)
tf.random.set_seed(1)
warnings.filterwarnings("ignore")
%matplotlib inline
pd.set_option('display.float_format', lambda x: '%.2f' % x) # To supress numerical display in scientific notations
import scipy.stats #library contains a number of probibility distributions and statistical functions
df = pd.read_csv('Churn.csv')
df.head()
| RowNumber | CustomerId | Surname | CreditScore | Geography | Gender | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 15634602 | Hargrave | 619 | France | Female | 42 | 2 | 0.00 | 1 | 1 | 1 | 101348.88 | 1 |
| 1 | 2 | 15647311 | Hill | 608 | Spain | Female | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 |
| 2 | 3 | 15619304 | Onio | 502 | France | Female | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 |
| 3 | 4 | 15701354 | Boni | 699 | France | Female | 39 | 1 | 0.00 | 2 | 0 | 0 | 93826.63 | 0 |
| 4 | 5 | 15737888 | Mitchell | 850 | Spain | Female | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 |
To understand why customers leave the bank, and possibly make recomendations on how to keep current customers.
CustomerId: Unique ID which is assigned to each customer
Surname: Last name of the customer
CreditScore: It defines the credit history of the customer.
Geography: A customer’s location
Gender: It defines the Gender of the customer
Age: Age of the customer
Tenure: Number of years for which the customer has been with the bank
NumOfProducts: It refers to the number of products that a customer has purchased through the bank.
Balance: Account balance
HasCrCard: It is a categorical variable that decides whether the customer has a credit card or not.
EstimatedSalary: Estimated salary
isActiveMember: It is a categorical variable that decides whether the customer is an active member of the bank or not ( Active member in the sense, using bank products regularly, making transactions, etc )
Exited: It is a categorical variable that decides whether the customer left the bank within six months or not. It can take two values
0=No ( Customer did not leave the bank )
1=Yes ( Customer left the bank )
df.isnull().sum().sort_values(ascending=False)
RowNumber 0 CustomerId 0 Surname 0 CreditScore 0 Geography 0 Gender 0 Age 0 Tenure 0 Balance 0 NumOfProducts 0 HasCrCard 0 IsActiveMember 0 EstimatedSalary 0 Exited 0 dtype: int64
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 10000 entries, 0 to 9999 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 RowNumber 10000 non-null int64 1 CustomerId 10000 non-null int64 2 Surname 10000 non-null object 3 CreditScore 10000 non-null int64 4 Geography 10000 non-null object 5 Gender 10000 non-null object 6 Age 10000 non-null int64 7 Tenure 10000 non-null int64 8 Balance 10000 non-null float64 9 NumOfProducts 10000 non-null int64 10 HasCrCard 10000 non-null int64 11 IsActiveMember 10000 non-null int64 12 EstimatedSalary 10000 non-null float64 13 Exited 10000 non-null int64 dtypes: float64(2), int64(9), object(3) memory usage: 1.1+ MB
df.drop(['RowNumber'], axis=1, inplace=True)
df.drop(['CustomerId'], axis=1, inplace=True)
df.drop(['Surname'], axis=1, inplace=True)
df.head()
| CreditScore | Geography | Gender | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 619 | France | Female | 42 | 2 | 0.00 | 1 | 1 | 1 | 101348.88 | 1 |
| 1 | 608 | Spain | Female | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 |
| 2 | 502 | France | Female | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 |
| 3 | 699 | France | Female | 39 | 1 | 0.00 | 2 | 0 | 0 | 93826.63 | 0 |
| 4 | 850 | Spain | Female | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 |
df.Geography.unique()
array(['France', 'Spain', 'Germany'], dtype=object)
df.Gender.unique()
array(['Female', 'Male'], dtype=object)
#################################CHECK DUPLICATES
#check for duplicated rows
df.duplicated().sum()
0
#below redefining buckets for each case
# replaceStruct = {
# "Geography": {"France": 1, "Spain":2 , "Germany": 3},
# "Gender": {"Female": 1, "Male": 0 }
# }
oneHotCols=["Geography","Gender"]
#reassign the values in the dataframe
# df=df.replace(replaceStruct)
df=pd.get_dummies(df, columns=oneHotCols)
df.head(10)
| CreditScore | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | Geography_France | Geography_Germany | Geography_Spain | Gender_Female | Gender_Male | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 619 | 42 | 2 | 0.00 | 1 | 1 | 1 | 101348.88 | 1 | 1 | 0 | 0 | 1 | 0 |
| 1 | 608 | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 | 0 | 0 | 1 | 1 | 0 |
| 2 | 502 | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 | 1 | 0 | 0 | 1 | 0 |
| 3 | 699 | 39 | 1 | 0.00 | 2 | 0 | 0 | 93826.63 | 0 | 1 | 0 | 0 | 1 | 0 |
| 4 | 850 | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 | 0 | 0 | 1 | 1 | 0 |
| 5 | 645 | 44 | 8 | 113755.78 | 2 | 1 | 0 | 149756.71 | 1 | 0 | 0 | 1 | 0 | 1 |
| 6 | 822 | 50 | 7 | 0.00 | 2 | 1 | 1 | 10062.80 | 0 | 1 | 0 | 0 | 0 | 1 |
| 7 | 376 | 29 | 4 | 115046.74 | 4 | 1 | 0 | 119346.88 | 1 | 0 | 1 | 0 | 1 | 0 |
| 8 | 501 | 44 | 4 | 142051.07 | 2 | 0 | 1 | 74940.50 | 0 | 1 | 0 | 0 | 0 | 1 |
| 9 | 684 | 27 | 2 | 134603.88 | 1 | 1 | 1 | 71725.73 | 0 | 1 | 0 | 0 | 0 | 1 |
df.Tenure.unique()
array([ 2, 1, 8, 7, 4, 6, 3, 10, 5, 9, 0])
df.loc[df['Tenure'],'Tenure'].value_counts(dropna=False)
2 2386 8 2060 4 2053 1 2044 7 967 6 490 Name: Tenure, dtype: int64
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 10000 entries, 0 to 9999 Data columns (total 11 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 CreditScore 10000 non-null int64 1 Geography 10000 non-null int64 2 Gender 10000 non-null int64 3 Age 10000 non-null int64 4 Tenure 10000 non-null int64 5 Balance 10000 non-null float64 6 NumOfProducts 10000 non-null int64 7 HasCrCard 10000 non-null int64 8 IsActiveMember 10000 non-null int64 9 EstimatedSalary 10000 non-null float64 10 Exited 10000 non-null int64 dtypes: float64(2), int64(9) memory usage: 859.5 KB
####################################MAKE A LIST OF NON OBJECT COLUMN NAMES
#Box plot function
# Defining the function for creating boxplot and hisogram
def histogram_boxplot(data, feature, figsize=(12, 7), kde=False, bins=None):
"""
Boxplot and histogram combined
data: dataframe
feature: dataframe column
figsize: size of figure (default (12,7))
kde: whether to show the density curve (default False)
bins: number of bins for histogram (default None)
"""
f2, (ax_box2, ax_hist2) = plt.subplots(
nrows=2, # Number of rows of the subplot grid= 2
sharex=True, # x-axis will be shared among all subplots
gridspec_kw={"height_ratios": (0.25, 0.75)},
figsize=figsize) # creating the 2 subplots
sns.boxplot(data=data, x=feature, ax=ax_box2, showmeans=True, color="mediumturquoise") # boxplot will be created and a star will indicate the mean value of the column
if bins:
sns.histplot(data=data, x=feature, kde=kde, ax=ax_hist2, bins=bins, color="mediumpurple")
else:
sns.histplot(data=data, x=feature, kde=kde, ax=ax_hist2, color="mediumpurple") # For histogram
ax_hist2.axvline(data[feature].mean(), color="green", linestyle="--") # Add mean to the histogram
ax_hist2.axvline(data[feature].median(), color="black", linestyle="-") # Add median to the histogram
#########################
columns_list = []
for i in df.columns:
if df.dtypes[i]!=object:
columns_list.append(i)
for i in columns_list:
histogram_boxplot(df,i) #you can't use this part without the defined functions
#################################OUTLIER TEST
# outlier detection using boxplot - UNIVARIATE FIRST
# selecting the numerical columns of data and adding their names in a list
numeric_columns = columns_list
plt.figure(figsize=(15, 12))
for i, variable in enumerate(numeric_columns):
plt.subplot(4, 4, i + 1)
plt.boxplot(df[variable], whis=1.5)
plt.tight_layout()
plt.title(variable)
plt.show()
#IQR
# to find the 25th percentile and 75th percentile for the numerical columns.
Q1 = df[numeric_columns].quantile(0.25)
Q3 = df[numeric_columns].quantile(0.75)
IQR = Q3 - Q1 #Inter Quantile Range (75th percentile - 25th percentile)
lower_whisker = Q1 - 1.5*IQR #Finding lower and upper bounds for all values. All values outside these bounds are outliers
upper_whisker = Q3 + 1.5*IQR
# Percentage of outliers in each column
((df[numeric_columns] < lower_whisker) | (df[numeric_columns] > upper_whisker)).sum()/df.shape[0]*100
CreditScore 0.15 Age 3.59 Tenure 0.00 Balance 0.00 NumOfProducts 0.60 HasCrCard 0.00 IsActiveMember 0.00 EstimatedSalary 0.00 Exited 20.37 Geography_France 0.00 Geography_Germany 0.00 Geography_Spain 24.77 Gender_Female 0.00 Gender_Male 0.00 dtype: float64
df.loc[df['NumOfProducts'],'NumOfProducts'].value_counts(dropna=False)
1 5144 3 4590 2 266 Name: NumOfProducts, dtype: int64
####################################TREATING OUTLIERS
#IQR
def treat_outliers(df, col):
"""
treats outliers in a variable
col: str, name of the numerical variable
df: dataframe
col: name of the column
"""
Q1 = df[col].quantile(0.25) # 25th quantile
Q3 = df[col].quantile(0.75) # 75th quantile
IQR = Q3 - Q1 # Inter Quantile Range (75th perentile - 25th percentile)
lower_whisker = Q1 - 1.5 * IQR
upper_whisker = Q3 + 1.5 * IQR
# all the values smaller than lower_whisker will be assigned the value of lower_whisker
# all the values greater than upper_whisker will be assigned the value of upper_whisker
# the assignment will be done by using the clip function of NumPy
df[col] = np.clip(df[col], lower_whisker, upper_whisker)
return df
#check the outliers
#Treating outliers in Rooms column
df = treat_outliers(df,'Age')
df = treat_outliers(df,'CreditScore')
#df = treat_outliers(df,'NumOfProducts')
# visualizing the column after outlier treatment
# outlier detection using boxplot
# selecting the numerical columns where outliers were treated
plt.figure(figsize=(15, 12))
for i, variable in enumerate(numeric_columns):
plt.subplot(4, 4, i + 1)
plt.boxplot(df[variable], whis=1.5)
plt.tight_layout()
plt.title(variable)
plt.show()
sns.histplot(data=df,x='EstimatedSalary',stat='density')
plt.show()
sns.histplot(data=df,x='Balance',stat='density')
plt.show()
df = df[df['Balance']>0]
sns.histplot(data=df,x='Balance',stat='density')
plt.show()
df['Balance_range'] = pd.qcut(df['Balance'], q=4)
df['EstimatedSalary_range'] = pd.qcut(df['EstimatedSalary'], q=5)
df.head()
| CreditScore | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | Geography_France | Geography_Germany | Geography_Spain | Gender_Female | Gender_Male | Balance_label | EstimatedSalary_label | Balance_range | EstimatedSalary_range | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 608 | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 3 | (3768.689, 100181.975] | (80414.646, 120377.52] |
| 2 | 502 | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 | 1 | 0 | 0 | 1 | 0 | 4 | 3 | (139512.29, 250898.09] | (80414.646, 120377.52] |
| 4 | 850 | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 | 0 | 0 | 1 | 1 | 0 | 3 | 2 | (119839.69, 139512.29] | (41818.154, 80414.646] |
| 5 | 645 | 44 | 8 | 113755.78 | 2 | 1 | 0 | 149756.71 | 1 | 0 | 0 | 1 | 0 | 1 | 2 | 4 | (100181.975, 119839.69] | (120377.52, 160494.082] |
| 7 | 383 | 29 | 4 | 115046.74 | 4 | 1 | 0 | 119346.88 | 1 | 0 | 1 | 0 | 1 | 0 | 2 | 3 | (100181.975, 119839.69] | (80414.646, 120377.52] |
df.EstimatedSalary_range.unique()
[(80414.646, 120377.52], (41818.154, 80414.646], (120377.52, 160494.082], (11.579, 41818.154], (160494.082, 199970.74]] Categories (5, interval[float64, right]): [(11.579, 41818.154] < (41818.154, 80414.646] < (80414.646, 120377.52] < (120377.52, 160494.082] < (160494.082, 199970.74]]
bal_labels = ['Balance: 0 - 100181',
'Balance: 100181 - 119839',
'Balance: 119829 - 139512',
'Balance: 139512 - 250898']
sal_labels = ['EstSalary: 11 - 41818',
'EstSalary: 41818 - 80414',
'EstSalary: 80414 - 120377',
'EstSalary: 120377 - 160494',
'EstSalary: 160494 - 200000']
df['Balance_label'] = pd.qcut(df['Balance'], q=4, labels=bal_labels)
df['EstimatedSalary_label'] = pd.qcut(df['EstimatedSalary'], q=5, labels=sal_labels)
df.head()
| CreditScore | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | Geography_France | Geography_Germany | Geography_Spain | Gender_Female | Gender_Male | Balance_label | EstimatedSalary_label | Balance_range | EstimatedSalary_range | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 608 | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 | 0 | 0 | 1 | 1 | 0 | Balance: 0 - 100181 | EstSalary: 80414 - 120377 | (3768.689, 100181.975] | (80414.646, 120377.52] |
| 2 | 502 | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 | 1 | 0 | 0 | 1 | 0 | Balance: 139512 - 250898 | EstSalary: 80414 - 120377 | (139512.29, 250898.09] | (80414.646, 120377.52] |
| 4 | 850 | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 | 0 | 0 | 1 | 1 | 0 | Balance: 119829 - 139512 | EstSalary: 41818 - 80414 | (119839.69, 139512.29] | (41818.154, 80414.646] |
| 5 | 645 | 44 | 8 | 113755.78 | 2 | 1 | 0 | 149756.71 | 1 | 0 | 0 | 1 | 0 | 1 | Balance: 100181 - 119839 | EstSalary: 120377 - 160494 | (100181.975, 119839.69] | (120377.52, 160494.082] |
| 7 | 383 | 29 | 4 | 115046.74 | 4 | 1 | 0 | 119346.88 | 1 | 0 | 1 | 0 | 1 | 0 | Balance: 100181 - 119839 | EstSalary: 80414 - 120377 | (100181.975, 119839.69] | (80414.646, 120377.52] |
df.drop(['Balance_range'], axis=1, inplace=True)
df.drop(['EstimatedSalary_range'], axis=1, inplace=True)
oneHotCols=["Balance_label","EstimatedSalary_label"]
df=pd.get_dummies(df, columns=oneHotCols)
df.head(10)
| CreditScore | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | Geography_France | ... | Gender_Male | Balance_label_Balance: 0 - 100181 | Balance_label_Balance: 100181 - 119839 | Balance_label_Balance: 119829 - 139512 | Balance_label_Balance: 139512 - 250898 | EstimatedSalary_label_EstSalary: 11 - 41818 | EstimatedSalary_label_EstSalary: 41818 - 80414 | EstimatedSalary_label_EstSalary: 80414 - 120377 | EstimatedSalary_label_EstSalary: 120377 - 160494 | EstimatedSalary_label_EstSalary: 160494 - 200000 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 608 | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 | 0 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 2 | 502 | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 | 1 | ... | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 4 | 850 | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 | 0 | ... | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 5 | 645 | 44 | 8 | 113755.78 | 2 | 1 | 0 | 149756.71 | 1 | 0 | ... | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 7 | 383 | 29 | 4 | 115046.74 | 4 | 1 | 0 | 119346.88 | 1 | 0 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 8 | 501 | 44 | 4 | 142051.07 | 2 | 0 | 1 | 74940.50 | 0 | 1 | ... | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
| 9 | 684 | 27 | 2 | 134603.88 | 1 | 1 | 1 | 71725.73 | 0 | 1 | ... | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 10 | 528 | 31 | 6 | 102016.72 | 2 | 0 | 0 | 80181.12 | 0 | 1 | ... | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 15 | 616 | 45 | 3 | 143129.41 | 2 | 0 | 1 | 64327.26 | 0 | 0 | ... | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
| 16 | 653 | 58 | 1 | 132602.88 | 1 | 1 | 0 | 5097.67 | 1 | 0 | ... | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
10 rows × 23 columns
df.drop(['Balance'], axis=1, inplace=True)
df.drop(['EstimatedSalary'], axis=1, inplace=True)
df.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 6383 entries, 1 to 9999 Data columns (total 21 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 CreditScore 6383 non-null int64 1 Age 6383 non-null int64 2 Tenure 6383 non-null int64 3 NumOfProducts 6383 non-null int64 4 HasCrCard 6383 non-null int64 5 IsActiveMember 6383 non-null int64 6 Exited 6383 non-null int64 7 Geography_France 6383 non-null uint8 8 Geography_Germany 6383 non-null uint8 9 Geography_Spain 6383 non-null uint8 10 Gender_Female 6383 non-null uint8 11 Gender_Male 6383 non-null uint8 12 Balance_label_Balance: 0 - 100181 6383 non-null uint8 13 Balance_label_Balance: 100181 - 119839 6383 non-null uint8 14 Balance_label_Balance: 119829 - 139512 6383 non-null uint8 15 Balance_label_Balance: 139512 - 250898 6383 non-null uint8 16 EstimatedSalary_label_EstSalary: 11 - 41818 6383 non-null uint8 17 EstimatedSalary_label_EstSalary: 41818 - 80414 6383 non-null uint8 18 EstimatedSalary_label_EstSalary: 80414 - 120377 6383 non-null uint8 19 EstimatedSalary_label_EstSalary: 120377 - 160494 6383 non-null uint8 20 EstimatedSalary_label_EstSalary: 160494 - 200000 6383 non-null uint8 dtypes: int64(7), uint8(14) memory usage: 486.2 KB
df.isnull().sum().sort_values(ascending=False)
CreditScore 0 Gender_Male 0 EstimatedSalary_label_EstSalary: 120377 - 160494 0 EstimatedSalary_label_EstSalary: 80414 - 120377 0 EstimatedSalary_label_EstSalary: 41818 - 80414 0 EstimatedSalary_label_EstSalary: 11 - 41818 0 Balance_label_Balance: 139512 - 250898 0 Balance_label_Balance: 119829 - 139512 0 Balance_label_Balance: 100181 - 119839 0 Balance_label_Balance: 0 - 100181 0 Gender_Female 0 Age 0 Geography_Spain 0 Geography_Germany 0 Geography_France 0 Exited 0 IsActiveMember 0 HasCrCard 0 NumOfProducts 0 Tenure 0 EstimatedSalary_label_EstSalary: 160494 - 200000 0 dtype: int64
# labeled_barplot(Data, "Gender")
columns_list = []
for i in df.columns:
if df.dtypes[i]!=object:
columns_list.append(i)
for i in columns_list:
labeled_barplot(df,i)
sns.pairplot(data=df[columns_list], diag_kind="kde")
plt.show()
#correlation
plt.figure(figsize=(20,10))
sns.heatmap(df.corr(),annot=True,cmap='Spectral',vmin=-1,vmax=1)
plt.show()
df.head()
| CreditScore | Age | Tenure | NumOfProducts | HasCrCard | IsActiveMember | Exited | Geography_France | Geography_Germany | Geography_Spain | ... | Gender_Male | Balance_label_Balance: 0 - 100181 | Balance_label_Balance: 100181 - 119839 | Balance_label_Balance: 119829 - 139512 | Balance_label_Balance: 139512 - 250898 | EstimatedSalary_label_EstSalary: 11 - 41818 | EstimatedSalary_label_EstSalary: 41818 - 80414 | EstimatedSalary_label_EstSalary: 80414 - 120377 | EstimatedSalary_label_EstSalary: 120377 - 160494 | EstimatedSalary_label_EstSalary: 160494 - 200000 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 608 | 41 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 2 | 502 | 42 | 8 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 4 | 850 | 43 | 2 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | ... | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 5 | 645 | 44 | 8 | 2 | 1 | 0 | 1 | 0 | 0 | 1 | ... | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 7 | 383 | 29 | 4 | 4 | 1 | 0 | 1 | 0 | 1 | 0 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
5 rows × 21 columns
import pandas as pd
pd.set_option('display.max_rows', None)
#this one removes the 1 correlations due to variables being compared to each other
# Create correlation matrix
corr_mat = df.corr(method='pearson')
# Drop correlations where the variable names are the same
corr_mat = corr_mat.mask(np.tril(np.ones_like(corr_mat, dtype=bool)))
# Convert correlation matrix to 1-D Series and sort
sorted_mat = corr_mat.unstack().drop_duplicates().sort_values()
# Remove correlations with a value of 1 or null values
sorted_mat = sorted_mat[(sorted_mat != 1) & (~sorted_mat.isnull())]
print(sorted_mat)
Gender_Male Gender_Female -1.00
Geography_Germany Geography_France -0.67
Geography_Spain Geography_France -0.41
Geography_Germany -0.40
Balance_label_Balance: 100181 - 119839 Balance_label_Balance: 0 - 100181 -0.33
Balance_label_Balance: 139512 - 250898 Balance_label_Balance: 100181 - 119839 -0.33
Balance_label_Balance: 0 - 100181 -0.33
Balance_label_Balance: 119829 - 139512 Balance_label_Balance: 0 - 100181 -0.33
Balance_label_Balance: 139512 - 250898 Balance_label_Balance: 119829 - 139512 -0.33
Balance_label_Balance: 119829 - 139512 Balance_label_Balance: 100181 - 119839 -0.33
EstimatedSalary_label_EstSalary: 80414 - 120377 EstimatedSalary_label_EstSalary: 11 - 41818 -0.25
EstimatedSalary_label_EstSalary: 160494 - 200000 EstimatedSalary_label_EstSalary: 80414 - 120377 -0.25
EstimatedSalary_label_EstSalary: 11 - 41818 -0.25
EstimatedSalary_label_EstSalary: 41818 - 80414 -0.25
EstimatedSalary_label_EstSalary: 120377 - 160494 EstimatedSalary_label_EstSalary: 11 - 41818 -0.25
EstimatedSalary_label_EstSalary: 160494 - 200000 EstimatedSalary_label_EstSalary: 120377 - 160494 -0.25
EstimatedSalary_label_EstSalary: 80414 - 120377 EstimatedSalary_label_EstSalary: 41818 - 80414 -0.25
EstimatedSalary_label_EstSalary: 120377 - 160494 EstimatedSalary_label_EstSalary: 80414 - 120377 -0.25
EstimatedSalary_label_EstSalary: 41818 - 80414 EstimatedSalary_label_EstSalary: 11 - 41818 -0.25
EstimatedSalary_label_EstSalary: 120377 - 160494 EstimatedSalary_label_EstSalary: 41818 - 80414 -0.25
Exited IsActiveMember -0.17
Geography_France NumOfProducts -0.13
Exited -0.11
Gender_Male Exited -0.11
Geography_Spain NumOfProducts -0.07
Balance_label_Balance: 0 - 100181 Geography_Germany -0.06
Geography_Spain Exited -0.05
Geography_France Age -0.05
Balance_label_Balance: 0 - 100181 Exited -0.05
Balance_label_Balance: 139512 - 250898 Geography_Germany -0.04
IsActiveMember Tenure -0.04
Balance_label_Balance: 100181 - 119839 Geography_France -0.04
Gender_Male Geography_Germany -0.04
NumOfProducts -0.04
EstimatedSalary_label_EstSalary: 160494 - 200000 Geography_Spain -0.03
Gender_Female IsActiveMember -0.03
Exited CreditScore -0.03
Balance_label_Balance: 100181 - 119839 Geography_Spain -0.03
Gender_Female Geography_Spain -0.03
Geography_Germany IsActiveMember -0.03
Gender_Male Age -0.03
Balance_label_Balance: 119829 - 139512 Geography_France -0.03
EstimatedSalary_label_EstSalary: 11 - 41818 NumOfProducts -0.02
EstimatedSalary_label_EstSalary: 120377 - 160494 Gender_Male -0.02
EstimatedSalary_label_EstSalary: 11 - 41818 Balance_label_Balance: 119829 - 139512 -0.02
EstimatedSalary_label_EstSalary: 41818 - 80414 Balance_label_Balance: 100181 - 119839 -0.02
HasCrCard Age -0.02
Geography_Spain HasCrCard -0.02
IsActiveMember HasCrCard -0.02
Balance_label_Balance: 139512 - 250898 Age -0.02
EstimatedSalary_label_EstSalary: 120377 - 160494 Geography_Germany -0.02
EstimatedSalary_label_EstSalary: 80414 - 120377 IsActiveMember -0.02
Balance_label_Balance: 139512 - 250898 Gender_Female -0.02
Balance_label_Balance: 119829 - 139512 Geography_Spain -0.02
Balance_label_Balance: 0 - 100181 Gender_Male -0.02
Gender_Female Tenure -0.02
HasCrCard CreditScore -0.01
Gender_Female Geography_France -0.01
Balance_label_Balance: 139512 - 250898 Exited -0.01
Balance_label_Balance: 0 - 100181 HasCrCard -0.01
Tenure -0.01
Age CreditScore -0.01
EstimatedSalary_label_EstSalary: 80414 - 120377 Tenure -0.01
Balance_label_Balance: 119829 - 139512 -0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 Age -0.01
EstimatedSalary_label_EstSalary: 120377 - 160494 Balance_label_Balance: 0 - 100181 -0.01
CreditScore -0.01
HasCrCard -0.01
EstimatedSalary_label_EstSalary: 80414 - 120377 Geography_Germany -0.01
EstimatedSalary_label_EstSalary: 41818 - 80414 Exited -0.01
Geography_Spain -0.01
EstimatedSalary_label_EstSalary: 11 - 41818 Gender_Female -0.01
Balance_label_Balance: 100181 - 119839 HasCrCard -0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 IsActiveMember -0.01
Balance_label_Balance: 119829 - 139512 CreditScore -0.01
EstimatedSalary_label_EstSalary: 11 - 41818 Tenure -0.01
Geography_France Tenure -0.01
HasCrCard -0.01
EstimatedSalary_label_EstSalary: 41818 - 80414 Balance_label_Balance: 139512 - 250898 -0.01
EstimatedSalary_label_EstSalary: 120377 - 160494 Age -0.01
Balance_label_Balance: 100181 - 119839 Gender_Male -0.01
Gender_Female HasCrCard -0.01
Balance_label_Balance: 119829 - 139512 Gender_Female -0.01
EstimatedSalary_label_EstSalary: 120377 - 160494 Geography_France -0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 Gender_Female -0.01
EstimatedSalary_label_EstSalary: 80414 - 120377 NumOfProducts -0.01
Balance_label_Balance: 119829 - 139512 IsActiveMember -0.01
IsActiveMember NumOfProducts -0.01
Balance_label_Balance: 139512 - 250898 IsActiveMember -0.01
EstimatedSalary_label_EstSalary: 80414 - 120377 CreditScore -0.00
EstimatedSalary_label_EstSalary: 41818 - 80414 Geography_Germany -0.00
EstimatedSalary_label_EstSalary: 11 - 41818 Geography_France -0.00
EstimatedSalary_label_EstSalary: 80414 - 120377 Gender_Female -0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 Balance_label_Balance: 139512 - 250898 -0.00
EstimatedSalary_label_EstSalary: 41818 - 80414 Tenure -0.00
CreditScore -0.00
Age -0.00
EstimatedSalary_label_EstSalary: 80414 - 120377 Geography_France -0.00
Gender_Male CreditScore -0.00
Balance_label_Balance: 139512 - 250898 CreditScore -0.00
Balance_label_Balance: 0 - 100181 Age -0.00
Geography_France CreditScore -0.00
Exited HasCrCard -0.00
EstimatedSalary_label_EstSalary: 120377 - 160494 Exited -0.00
EstimatedSalary_label_EstSalary: 41818 - 80414 Gender_Female -0.00
EstimatedSalary_label_EstSalary: 11 - 41818 Geography_Spain -0.00
Geography_France IsActiveMember -0.00
Exited Tenure -0.00
Balance_label_Balance: 119829 - 139512 NumOfProducts -0.00
EstimatedSalary_label_EstSalary: 120377 - 160494 Balance_label_Balance: 139512 - 250898 -0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 HasCrCard -0.00
EstimatedSalary_label_EstSalary: 11 - 41818 HasCrCard -0.00
Geography_Spain CreditScore -0.00
Balance_label_Balance: 100181 - 119839 IsActiveMember -0.00
EstimatedSalary_label_EstSalary: 80414 - 120377 Exited -0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 Balance_label_Balance: 100181 - 119839 -0.00
Balance_label_Balance: 139512 - 250898 NumOfProducts -0.00
Balance_label_Balance: 0 - 100181 NumOfProducts -0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 Tenure 0.00
Geography_Spain Tenure 0.00
EstimatedSalary_label_EstSalary: 80414 - 120377 Balance_label_Balance: 100181 - 119839 0.00
EstimatedSalary_label_EstSalary: 41818 - 80414 Balance_label_Balance: 0 - 100181 0.00
NumOfProducts 0.00
Balance_label_Balance: 100181 - 119839 NumOfProducts 0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 Geography_France 0.00
EstimatedSalary_label_EstSalary: 120377 - 160494 IsActiveMember 0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 Balance_label_Balance: 0 - 100181 0.00
EstimatedSalary_label_EstSalary: 80414 - 120377 HasCrCard 0.00
EstimatedSalary_label_EstSalary: 11 - 41818 Age 0.00
EstimatedSalary_label_EstSalary: 41818 - 80414 Gender_Male 0.00
EstimatedSalary_label_EstSalary: 11 - 41818 Exited 0.00
Geography_Germany CreditScore 0.00
EstimatedSalary_label_EstSalary: 160494 - 200000 Balance_label_Balance: 119829 - 139512 0.00
Tenure CreditScore 0.00
Gender_Female CreditScore 0.00
HasCrCard NumOfProducts 0.00
EstimatedSalary_label_EstSalary: 11 - 41818 Balance_label_Balance: 0 - 100181 0.00
Geography_Spain Age 0.00
Balance_label_Balance: 139512 - 250898 Tenure 0.00
EstimatedSalary_label_EstSalary: 120377 - 160494 Balance_label_Balance: 119829 - 139512 0.00
EstimatedSalary_label_EstSalary: 80414 - 120377 Gender_Male 0.00
Balance_label_Balance: 100181 - 119839 Tenure 0.00
CreditScore 0.01
EstimatedSalary_label_EstSalary: 11 - 41818 Geography_Germany 0.01
Balance_label_Balance: 119829 - 139512 Tenure 0.01
EstimatedSalary_label_EstSalary: 80414 - 120377 Balance_label_Balance: 139512 - 250898 0.01
Balance_label_Balance: 0 - 100181 0.01
Balance_label_Balance: 0 - 100181 CreditScore 0.01
NumOfProducts Tenure 0.01
EstimatedSalary_label_EstSalary: 11 - 41818 Balance_label_Balance: 139512 - 250898 0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 Gender_Male 0.01
Balance_label_Balance: 119829 - 139512 Gender_Male 0.01
Gender_Male HasCrCard 0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 CreditScore 0.01
Balance_label_Balance: 100181 - 119839 Gender_Female 0.01
EstimatedSalary_label_EstSalary: 11 - 41818 IsActiveMember 0.01
Tenure Age 0.01
Balance_label_Balance: 100181 - 119839 Age 0.01
Geography_Germany Tenure 0.01
Balance_label_Balance: 139512 - 250898 HasCrCard 0.01
EstimatedSalary_label_EstSalary: 120377 - 160494 Balance_label_Balance: 100181 - 119839 0.01
NumOfProducts CreditScore 0.01
EstimatedSalary_label_EstSalary: 41818 - 80414 HasCrCard 0.01
EstimatedSalary_label_EstSalary: 11 - 41818 Gender_Male 0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 Exited 0.01
NumOfProducts Age 0.01
EstimatedSalary_label_EstSalary: 11 - 41818 CreditScore 0.01
Balance_label_Balance: 119829 - 139512 Age 0.01
EstimatedSalary_label_EstSalary: 11 - 41818 Balance_label_Balance: 100181 - 119839 0.01
Balance_label_Balance: 0 - 100181 IsActiveMember 0.01
EstimatedSalary_label_EstSalary: 41818 - 80414 Geography_France 0.01
EstimatedSalary_label_EstSalary: 160494 - 200000 NumOfProducts 0.01
Balance_label_Balance: 139512 - 250898 Geography_Spain 0.01
Gender_Male Geography_France 0.01
Tenure 0.02
Balance_label_Balance: 119829 - 139512 HasCrCard 0.02
EstimatedSalary_label_EstSalary: 80414 - 120377 Geography_Spain 0.02
Balance_label_Balance: 0 - 100181 Gender_Female 0.02
Balance_label_Balance: 119829 - 139512 Exited 0.02
Balance_label_Balance: 139512 - 250898 Gender_Male 0.02
EstimatedSalary_label_EstSalary: 41818 - 80414 IsActiveMember 0.02
EstimatedSalary_label_EstSalary: 120377 - 160494 NumOfProducts 0.02
EstimatedSalary_label_EstSalary: 80414 - 120377 Age 0.02
EstimatedSalary_label_EstSalary: 120377 - 160494 Gender_Female 0.02
Tenure 0.03
Geography_Germany HasCrCard 0.03
Gender_Female Age 0.03
HasCrCard Tenure 0.03
Gender_Male Geography_Spain 0.03
EstimatedSalary_label_EstSalary: 160494 - 200000 Geography_Germany 0.03
EstimatedSalary_label_EstSalary: 41818 - 80414 Balance_label_Balance: 119829 - 139512 0.03
Gender_Male IsActiveMember 0.03
IsActiveMember CreditScore 0.03
EstimatedSalary_label_EstSalary: 120377 - 160494 Geography_Spain 0.03
Balance_label_Balance: 0 - 100181 Geography_Spain 0.03
Balance_label_Balance: 139512 - 250898 Geography_France 0.03
Balance_label_Balance: 0 - 100181 Geography_France 0.03
Geography_Spain IsActiveMember 0.03
Gender_Female NumOfProducts 0.04
Geography_Germany 0.04
Balance_label_Balance: 119829 - 139512 Geography_Germany 0.04
Balance_label_Balance: 100181 - 119839 Exited 0.04
Geography_Germany Age 0.05
IsActiveMember Age 0.05
Balance_label_Balance: 100181 - 119839 Geography_Germany 0.06
Exited NumOfProducts 0.08
Gender_Female Exited 0.11
Geography_Germany Exited 0.16
NumOfProducts 0.19
Exited Age 0.33
dtype: float64
df.head()
| CreditScore | Age | Tenure | NumOfProducts | HasCrCard | IsActiveMember | Exited | Geography_France | Geography_Germany | Geography_Spain | ... | Gender_Male | Balance_label_Balance: 0 - 100181 | Balance_label_Balance: 100181 - 119839 | Balance_label_Balance: 119829 - 139512 | Balance_label_Balance: 139512 - 250898 | EstimatedSalary_label_EstSalary: 11 - 41818 | EstimatedSalary_label_EstSalary: 41818 - 80414 | EstimatedSalary_label_EstSalary: 80414 - 120377 | EstimatedSalary_label_EstSalary: 120377 - 160494 | EstimatedSalary_label_EstSalary: 160494 - 200000 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 608 | 41 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | ... | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 2 | 502 | 42 | 8 | 3 | 1 | 0 | 1 | 1 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 4 | 850 | 43 | 2 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | ... | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 5 | 645 | 44 | 8 | 2 | 1 | 0 | 1 | 0 | 0 | 1 | ... | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 7 | 383 | 29 | 4 | 4 | 1 | 0 | 1 | 0 | 1 | 0 | ... | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
5 rows × 21 columns
# Select the columns before the 7th column
left_columns = df.iloc[:, 6:7]
# Select the columns after the rightmost 9 columns
right_columns = df.iloc[:, -9:]
# Concatenate the selected columns
test_df = pd.concat([left_columns, right_columns], axis=1)
test_df.head()
| Exited | Balance_label_Balance: 0 - 100181 | Balance_label_Balance: 100181 - 119839 | Balance_label_Balance: 119829 - 139512 | Balance_label_Balance: 139512 - 250898 | EstimatedSalary_label_EstSalary: 11 - 41818 | EstimatedSalary_label_EstSalary: 41818 - 80414 | EstimatedSalary_label_EstSalary: 80414 - 120377 | EstimatedSalary_label_EstSalary: 120377 - 160494 | EstimatedSalary_label_EstSalary: 160494 - 200000 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| 2 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
| 4 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
| 5 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 7 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
test_df['is_Filter'] = test_df['Exited'] == 1 # for hue
cols_to_exclude = ['Cat']
sns.pairplot(test_df[[colname for colname in test_df.columns if colname not in cols_to_exclude]], hue = 'is_Filter')
test_df.drop(['is_Filter'], axis=1, inplace=True)
#correlation
test_df = df
test_df['is_Filter'] = test_df['Exited'] == 1 # for hue
cols_to_exclude = ['Cat']
sns.pairplot(test_df[[colname for colname in test_df.columns if colname not in cols_to_exclude]], hue = 'is_Filter')
test_df.drop(['is_Filter'], axis=1, inplace=True)
### Cross validate the accuracy of the data
# separating data into X and Y
X = df.drop(['Exited'], axis = 1)
Y = df['Exited']
from sklearn import preprocessing
# scale all the columns of the mpg_df. This will produce a numpy array
X_scaled = preprocessing.scale(X)
X_scaled = pd.DataFrame(X_scaled, columns=X.columns)
# creating train and test sets
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.30, random_state=42, stratify = Y)
# defining kfold
kfold = KFold(n_splits=10, random_state=1, shuffle = True)
# to build logstic regression model
from sklearn.linear_model import LogisticRegression
# defining the model
model = LogisticRegression(random_state = 1)
# storing accuracy values of model for every fold in "results"
results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
# let's see the mean accuracy score
print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0))
Accuracy: 78.559% (2.014%)
X_train.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 4468 entries, 7112 to 4399 Data columns (total 20 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 CreditScore 4468 non-null int64 1 Age 4468 non-null int64 2 Tenure 4468 non-null int64 3 NumOfProducts 4468 non-null int64 4 HasCrCard 4468 non-null int64 5 IsActiveMember 4468 non-null int64 6 Geography_France 4468 non-null uint8 7 Geography_Germany 4468 non-null uint8 8 Geography_Spain 4468 non-null uint8 9 Gender_Female 4468 non-null uint8 10 Gender_Male 4468 non-null uint8 11 Balance_label_Balance: 0 - 100181 4468 non-null uint8 12 Balance_label_Balance: 100181 - 119839 4468 non-null uint8 13 Balance_label_Balance: 119829 - 139512 4468 non-null uint8 14 Balance_label_Balance: 139512 - 250898 4468 non-null uint8 15 EstimatedSalary_label_EstSalary: 11 - 41818 4468 non-null uint8 16 EstimatedSalary_label_EstSalary: 41818 - 80414 4468 non-null uint8 17 EstimatedSalary_label_EstSalary: 80414 - 120377 4468 non-null uint8 18 EstimatedSalary_label_EstSalary: 120377 - 160494 4468 non-null uint8 19 EstimatedSalary_label_EstSalary: 160494 - 200000 4468 non-null uint8 dtypes: int64(6), uint8(14) memory usage: 305.4 KB
The model's average accuracy on the dataset is approximately 79.629%, which means it correctly predicts the class labels for about 78.914% of the instances on average.
The standard deviation of 1.559% suggests that the model's performance is relatively consistent across different folds. In other words, the accuracy scores from one fold to another do not vary widely.
#Model #1
#initialize the model
model_1 = Sequential()
# This adds the input layer (by specifying input dimension) AND the first hidden layer (units)
#units below is the number of neurons in the dense layer
model_1.add(Dense(units=16, input_dim = 20,activation='relu')) # input of 10 columns as shown above
# hidden layer
model_1.add(Dense(units=24,activation='relu'))
#Adding Dropout to prevent overfitting
model_1.add(Dropout(0.5))
model_1.add(Dense(24,activation='relu'))
model_1.add(Dense(24,activation='relu'))
# Adding the output layer
# Notice that we do not need to specify input dim.
# we have an output of 1 node, which is the the desired dimensions of our output (fraud or not)
# We use the sigmoid because we want probability outcomes
model_1.add(Dense(1,activation='sigmoid'))
# Create optimizer with default learning rate
# Compile the model
model_1.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model_1.summary()
Model: "sequential_21"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_105 (Dense) (None, 16) 336
dense_106 (Dense) (None, 24) 408
dropout_28 (Dropout) (None, 24) 0
dense_107 (Dense) (None, 24) 600
dense_108 (Dense) (None, 24) 600
dense_109 (Dense) (None, 1) 25
=================================================================
Total params: 1,969
Trainable params: 1,969
Non-trainable params: 0
_________________________________________________________________
#fitting the model
history1=model_1.fit(X_train,y_train,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 239/239 [==============================] - 1s 2ms/step - loss: 3.9876 - accuracy: 0.6900 - val_loss: 0.5673 - val_accuracy: 0.7964 Epoch 2/100 239/239 [==============================] - 0s 947us/step - loss: 0.7712 - accuracy: 0.7241 - val_loss: 0.6474 - val_accuracy: 0.7964 Epoch 3/100 239/239 [==============================] - 0s 900us/step - loss: 0.6072 - accuracy: 0.7652 - val_loss: 0.5312 - val_accuracy: 0.7964 Epoch 4/100 239/239 [==============================] - 0s 898us/step - loss: 0.5674 - accuracy: 0.7722 - val_loss: 0.5079 - val_accuracy: 0.7964 Epoch 5/100 239/239 [==============================] - 0s 897us/step - loss: 0.5852 - accuracy: 0.7753 - val_loss: 0.5519 - val_accuracy: 0.7964 Epoch 6/100 239/239 [==============================] - 0s 916us/step - loss: 0.5421 - accuracy: 0.7941 - val_loss: 0.5065 - val_accuracy: 0.7964 Epoch 7/100 239/239 [==============================] - 0s 895us/step - loss: 0.5255 - accuracy: 0.7971 - val_loss: 0.5566 - val_accuracy: 0.7964 Epoch 8/100 239/239 [==============================] - 0s 898us/step - loss: 0.5220 - accuracy: 0.7966 - val_loss: 0.5163 - val_accuracy: 0.7964 Epoch 9/100 239/239 [==============================] - 0s 929us/step - loss: 0.5125 - accuracy: 0.7971 - val_loss: 0.5245 - val_accuracy: 0.7964 Epoch 10/100 239/239 [==============================] - 0s 945us/step - loss: 0.5083 - accuracy: 0.7971 - val_loss: 0.5064 - val_accuracy: 0.7964 Epoch 11/100 239/239 [==============================] - 0s 907us/step - loss: 0.5067 - accuracy: 0.7971 - val_loss: 0.5057 - val_accuracy: 0.7964 Epoch 12/100 239/239 [==============================] - 0s 930us/step - loss: 0.5085 - accuracy: 0.7971 - val_loss: 0.5059 - val_accuracy: 0.7964 Epoch 13/100 239/239 [==============================] - 0s 913us/step - loss: 0.5069 - accuracy: 0.7971 - val_loss: 0.5108 - val_accuracy: 0.7964 Epoch 14/100 239/239 [==============================] - 0s 915us/step - loss: 0.5061 - accuracy: 0.7971 - val_loss: 0.5097 - val_accuracy: 0.7964 Epoch 15/100 239/239 [==============================] - 0s 894us/step - loss: 0.5065 - accuracy: 0.7971 - val_loss: 0.5072 - val_accuracy: 0.7964 Epoch 16/100 239/239 [==============================] - 0s 957us/step - loss: 0.5058 - accuracy: 0.7971 - val_loss: 0.5091 - val_accuracy: 0.7964 Epoch 17/100 239/239 [==============================] - 0s 913us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5095 - val_accuracy: 0.7964 Epoch 18/100 239/239 [==============================] - 0s 983us/step - loss: 0.5074 - accuracy: 0.7971 - val_loss: 0.5056 - val_accuracy: 0.7964 Epoch 19/100 239/239 [==============================] - 0s 985us/step - loss: 0.5057 - accuracy: 0.7971 - val_loss: 0.5064 - val_accuracy: 0.7964 Epoch 20/100 239/239 [==============================] - 0s 987us/step - loss: 0.5052 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 21/100 239/239 [==============================] - 0s 898us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 22/100 239/239 [==============================] - 0s 929us/step - loss: 0.5045 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 23/100 239/239 [==============================] - 0s 927us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5057 - val_accuracy: 0.7964 Epoch 24/100 239/239 [==============================] - 0s 913us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 25/100 239/239 [==============================] - 0s 924us/step - loss: 0.5044 - accuracy: 0.7971 - val_loss: 0.5059 - val_accuracy: 0.7964 Epoch 26/100 239/239 [==============================] - 0s 912us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 27/100 239/239 [==============================] - 0s 942us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 28/100 239/239 [==============================] - 0s 982us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 29/100 239/239 [==============================] - 0s 933us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 30/100 239/239 [==============================] - 0s 959us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 31/100 239/239 [==============================] - 0s 921us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 32/100 239/239 [==============================] - 0s 954us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 33/100 239/239 [==============================] - 0s 889us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 34/100 239/239 [==============================] - 0s 903us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5056 - val_accuracy: 0.7964 Epoch 35/100 239/239 [==============================] - 0s 900us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 36/100 239/239 [==============================] - 0s 883us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 37/100 239/239 [==============================] - 0s 931us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 38/100 239/239 [==============================] - 0s 932us/step - loss: 0.5045 - accuracy: 0.7971 - val_loss: 0.5063 - val_accuracy: 0.7964 Epoch 39/100 239/239 [==============================] - 0s 947us/step - loss: 0.5043 - accuracy: 0.7971 - val_loss: 0.5061 - val_accuracy: 0.7964 Epoch 40/100 239/239 [==============================] - 0s 933us/step - loss: 0.5051 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 41/100 239/239 [==============================] - 0s 900us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 42/100 239/239 [==============================] - 0s 899us/step - loss: 0.5051 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 43/100 239/239 [==============================] - 0s 908us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5064 - val_accuracy: 0.7964 Epoch 44/100 239/239 [==============================] - 0s 894us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 45/100 239/239 [==============================] - 0s 921us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 46/100 239/239 [==============================] - 0s 1ms/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 47/100 239/239 [==============================] - 0s 906us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 48/100 239/239 [==============================] - 0s 924us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 49/100 239/239 [==============================] - 0s 894us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 50/100 239/239 [==============================] - 0s 895us/step - loss: 0.5051 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 51/100 239/239 [==============================] - 0s 994us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 52/100 239/239 [==============================] - 0s 922us/step - loss: 0.5043 - accuracy: 0.7971 - val_loss: 0.5065 - val_accuracy: 0.7964 Epoch 53/100 239/239 [==============================] - 0s 947us/step - loss: 0.5041 - accuracy: 0.7971 - val_loss: 0.5074 - val_accuracy: 0.7964 Epoch 54/100 239/239 [==============================] - 0s 934us/step - loss: 0.5044 - accuracy: 0.7971 - val_loss: 0.5062 - val_accuracy: 0.7964 Epoch 55/100 239/239 [==============================] - 0s 920us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5057 - val_accuracy: 0.7964 Epoch 56/100 239/239 [==============================] - 0s 933us/step - loss: 0.5051 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 57/100 239/239 [==============================] - 0s 940us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 58/100 239/239 [==============================] - 0s 925us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 59/100 239/239 [==============================] - 0s 920us/step - loss: 0.5050 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 60/100 239/239 [==============================] - 0s 951us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 61/100 239/239 [==============================] - 0s 939us/step - loss: 0.5050 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 62/100 239/239 [==============================] - 0s 889us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5062 - val_accuracy: 0.7964 Epoch 63/100 239/239 [==============================] - 0s 915us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 64/100 239/239 [==============================] - 0s 933us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 65/100 239/239 [==============================] - 0s 902us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 66/100 239/239 [==============================] - 0s 925us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 67/100 239/239 [==============================] - 0s 901us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 68/100 239/239 [==============================] - 0s 942us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 69/100 239/239 [==============================] - 0s 893us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 70/100 239/239 [==============================] - 0s 922us/step - loss: 0.5050 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 71/100 239/239 [==============================] - 0s 888us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 72/100 239/239 [==============================] - 0s 890us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 73/100 239/239 [==============================] - 0s 918us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 74/100 239/239 [==============================] - 0s 937us/step - loss: 0.5049 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 75/100 239/239 [==============================] - 0s 915us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 76/100 239/239 [==============================] - 0s 885us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 77/100 239/239 [==============================] - 0s 913us/step - loss: 0.5050 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 78/100 239/239 [==============================] - 0s 921us/step - loss: 0.5050 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 79/100 239/239 [==============================] - 0s 898us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5057 - val_accuracy: 0.7964 Epoch 80/100 239/239 [==============================] - 0s 935us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 81/100 239/239 [==============================] - 0s 960us/step - loss: 0.5045 - accuracy: 0.7971 - val_loss: 0.5064 - val_accuracy: 0.7964 Epoch 82/100 239/239 [==============================] - 0s 912us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 83/100 239/239 [==============================] - 0s 985us/step - loss: 0.5051 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 84/100 239/239 [==============================] - 0s 999us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 85/100 239/239 [==============================] - 0s 974us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5056 - val_accuracy: 0.7964 Epoch 86/100 239/239 [==============================] - 0s 986us/step - loss: 0.5051 - accuracy: 0.7971 - val_loss: 0.5058 - val_accuracy: 0.7964 Epoch 87/100 239/239 [==============================] - 0s 933us/step - loss: 0.5053 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 88/100 239/239 [==============================] - 0s 900us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 89/100 239/239 [==============================] - 0s 925us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 90/100 239/239 [==============================] - 0s 952us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 91/100 239/239 [==============================] - 0s 969us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 92/100 239/239 [==============================] - 0s 1ms/step - loss: 0.5050 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 93/100 239/239 [==============================] - 0s 986us/step - loss: 0.5045 - accuracy: 0.7971 - val_loss: 0.5061 - val_accuracy: 0.7964 Epoch 94/100 239/239 [==============================] - 0s 960us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 95/100 239/239 [==============================] - 0s 965us/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964 Epoch 96/100 239/239 [==============================] - 0s 1ms/step - loss: 0.5047 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 97/100 239/239 [==============================] - 0s 1000us/step - loss: 0.5044 - accuracy: 0.7971 - val_loss: 0.5064 - val_accuracy: 0.7964 Epoch 98/100 239/239 [==============================] - 0s 980us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5054 - val_accuracy: 0.7964 Epoch 99/100 239/239 [==============================] - 0s 923us/step - loss: 0.5048 - accuracy: 0.7971 - val_loss: 0.5053 - val_accuracy: 0.7964 Epoch 100/100 239/239 [==============================] - 0s 925us/step - loss: 0.5046 - accuracy: 0.7971 - val_loss: 0.5055 - val_accuracy: 0.7964
plt.plot(history1.history['accuracy'])
plt.plot(history1.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
from sklearn.metrics import roc_curve
from matplotlib import pyplot
# predict probabilities
yhat1 = model_1.predict(X_test)
# calculate roc curves
fpr, tpr, thresholds1 = roc_curve(Y_test, yhat1)
# calculate the g-mean for each threshold
gmeans1 = np.sqrt(tpr * (1-fpr))
# locate the index of the largest g-mean
ix = np.argmax(gmeans1)
print('Best Threshold=%f, G-Mean=%.3f' % (thresholds1[ix], gmeans1[ix]))
# plot the roc curve for the model
pyplot.plot([0,1], [0,1], linestyle='--', label='No Skill')
pyplot.plot(fpr, tpr, marker='.')
pyplot.scatter(fpr[ix], tpr[ix], marker='o', color='black', label='Best')
# axis labels
pyplot.xlabel('False Positive Rate')
pyplot.ylabel('True Positive Rate')
pyplot.legend()
# show the plot
pyplot.show()
60/60 [==============================] - 0s 534us/step Best Threshold=0.210576, G-Mean=0.052
The Accuracy is a little low, and the loss is higher that I would like.
Also there is no ROC curve with means the model is not making useful distinctions between the positive and negative classes.
I'll try using the SMOTE technique to see if we can improve the preformance of the model.
# Splitting the dataset into the Training and Testing set.
from sklearn.preprocessing import MinMaxScaler
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.8, random_state = 42)
scaler = MinMaxScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from imblearn.over_sampling import SMOTE
# Fit SMOTE on train data(Synthetic Minority Oversampling Technique)
sm = SMOTE(sampling_strategy=0.3, k_neighbors=5, random_state=42)
X_train_over, y_train_over = sm.fit_resample(X_train, y_train)
print("Before OverSampling, count of label '1': {}".format(sum(y_train == 1)))
print("Before OverSampling, count of label '0': {} \n".format(sum(y_train == 0)))
print("After OverSampling, count of label '1': {}".format(sum(y_train_over == 1)))
print("After OverSampling, count of label '0': {} \n".format(sum(y_train_over == 0)))
print("After OverSampling, the shape of train_X: {}".format(X_train_over.shape))
print("After OverSampling, the shape of train_y: {} \n".format(y_train_over.shape))
Before OverSampling, count of label '1': 293 Before OverSampling, count of label '0': 983 After OverSampling, count of label '1': 294 After OverSampling, count of label '0': 983 After OverSampling, the shape of train_X: (1277, 20) After OverSampling, the shape of train_y: (1277,)
# to build logstic regression model
from sklearn.linear_model import LogisticRegression
# defining the model
model = LogisticRegression(random_state = 1)
# storing accuracy values of model for every fold in "results"
results = cross_val_score(model, X_train_over, y_train_over, cv=kfold, scoring='accuracy')
# let's see the value of accuracy for every fold
print(results)
[0.8046875 0.828125 0.8046875 0.8125 0.78125 0.7890625 0.8359375 0.8503937 0.81102362 0.73228346]
# let's see the mean accuracy score
print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0))
Accuracy: 80.500% (3.123%)
## Testing Ridge
from sklearn import preprocessing
# scale all the columns of the mpg_df. This will produce a numpy array
X_scaled = preprocessing.scale(X)
X_scaled = pd.DataFrame(X_scaled, columns=X.columns)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, Y, test_size=0.30, random_state=1)
regression_model = LinearRegression()
regression_model.fit(X_train, y_train)
for idx, col_name in enumerate(X_train.columns):
print("The coefficient for {} is {}".format(col_name, regression_model.coef_[idx]))
## testing Ridge
ridge = Ridge(alpha=.3)
ridge.fit(X_train,y_train)
print ("Ridge model:", (ridge.coef_))
The coefficient for CreditScore is -0.008971117344083611 The coefficient for Age is 0.14869161654253046 The coefficient for Tenure is -0.006380013185686983 The coefficient for NumOfProducts is 0.015185421704473677 The coefficient for HasCrCard is -0.0011717280833360355 The coefficient for IsActiveMember is -0.0753157074456723 The coefficient for Geography_France is -6144859348862.27 The coefficient for Geography_Germany is -6110012361544.077 The coefficient for Geography_Spain is -5005820242469.596 The coefficient for Gender_Female is -7912655137696.856 The coefficient for Gender_Male is -7912655137696.893 The coefficient for Balance_label_Balance: 0 - 100181 is 1722602530809.1484 The coefficient for Balance_label_Balance: 100181 - 119839 is 1722602530809.1687 The coefficient for Balance_label_Balance: 119829 - 139512 is 1722242643093.7964 The coefficient for Balance_label_Balance: 139512 - 250898 is 1722602530809.1594 The coefficient for EstimatedSalary_label_EstSalary: 11 - 41818 is -2236014114031.007 The coefficient for EstimatedSalary_label_EstSalary: 41818 - 80414 is -2235357310618.867 The coefficient for EstimatedSalary_label_EstSalary: 80414 - 120377 is -2236014114031.0103 The coefficient for EstimatedSalary_label_EstSalary: 120377 - 160494 is -2235357310618.863 The coefficient for EstimatedSalary_label_EstSalary: 160494 - 200000 is -2236014114031.0044 Ridge model: [-0.00839515 0.14859493 -0.00421388 0.01457446 0.0028065 -0.07344 -0.0221343 0.03385334 -0.01414996 0.0213488 -0.0213488 -0.01076006 0.00864288 0.00278185 -0.00066408 0.0007538 -0.00288343 -0.00304943 0.00125549 0.00392309]
#Lasso
## testing lasso
lasso = Lasso(alpha=0.2)
lasso.fit(X_train,y_train)
print ("Lasso model:", (lasso.coef_))
Lasso model: [-0. 0. -0. 0. 0. -0. -0. 0. -0. 0. -0. -0. 0. 0. -0. 0. -0. -0. 0. 0.]
## compare
print(regression_model.score(X_train, y_train))
print(regression_model.score(X_test, y_test))
0.18623169300464604 0.1470697705081333
print(ridge.score(X_train, y_train))
print(ridge.score(X_test, y_test))
0.18685243332145485 0.14621830343063857
print(lasso.score(X_train, y_train))
print(lasso.score(X_test, y_test))
0.0 -0.0006593610757554824
#### trying polynomials
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(degree = 3, interaction_only=True)
X_poly = poly.fit_transform(X_scaled)
X_train, X_test, y_train, y_test = train_test_split(X_poly, Y, test_size=0.30, random_state=1)
X_train.shape
(4468, 1351)
regression_model.fit(X_train, y_train)
print(regression_model.coef_[0])
-1678885404694.8037
ridge = Ridge(alpha=.3)
ridge.fit(X_train,y_train)
print ("Ridge model:", (ridge.coef_))
Ridge model: [ 0.00000000e+00 -1.07527742e-03 3.80585075e-02 ... 1.21338685e-04 3.83373919e-04 -6.71546807e-05]
print(ridge.score(X_train, y_train))
print(ridge.score(X_test, y_test))
0.33967512085526363 0.1053089928658163
#fitting the model
history=model_1.fit(X_train_over,y_train_over,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 69/69 [==============================] - 1s 3ms/step - loss: 0.5338 - accuracy: 0.7669 - val_loss: 0.4920 - val_accuracy: 0.7812 Epoch 2/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5186 - accuracy: 0.7659 - val_loss: 0.4618 - val_accuracy: 0.7812 Epoch 3/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4932 - accuracy: 0.7689 - val_loss: 0.4525 - val_accuracy: 0.7852 Epoch 4/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4782 - accuracy: 0.7806 - val_loss: 0.4423 - val_accuracy: 0.8125 Epoch 5/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4817 - accuracy: 0.7698 - val_loss: 0.4407 - val_accuracy: 0.8242 Epoch 6/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4743 - accuracy: 0.7826 - val_loss: 0.4359 - val_accuracy: 0.8242 Epoch 7/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4550 - accuracy: 0.7875 - val_loss: 0.4279 - val_accuracy: 0.8164 Epoch 8/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4555 - accuracy: 0.7933 - val_loss: 0.4246 - val_accuracy: 0.8203 Epoch 9/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4331 - accuracy: 0.8031 - val_loss: 0.4205 - val_accuracy: 0.8203 Epoch 10/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4451 - accuracy: 0.8031 - val_loss: 0.4225 - val_accuracy: 0.8242 Epoch 11/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4438 - accuracy: 0.7992 - val_loss: 0.4203 - val_accuracy: 0.8281 Epoch 12/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4318 - accuracy: 0.8061 - val_loss: 0.4218 - val_accuracy: 0.8320 Epoch 13/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4236 - accuracy: 0.8227 - val_loss: 0.4180 - val_accuracy: 0.8203 Epoch 14/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4247 - accuracy: 0.8208 - val_loss: 0.4152 - val_accuracy: 0.8281 Epoch 15/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4224 - accuracy: 0.8198 - val_loss: 0.4202 - val_accuracy: 0.8203 Epoch 16/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4117 - accuracy: 0.8208 - val_loss: 0.4154 - val_accuracy: 0.8164 Epoch 17/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4027 - accuracy: 0.8217 - val_loss: 0.4100 - val_accuracy: 0.8203 Epoch 18/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4083 - accuracy: 0.8168 - val_loss: 0.4118 - val_accuracy: 0.8242 Epoch 19/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4117 - accuracy: 0.8168 - val_loss: 0.4141 - val_accuracy: 0.8164 Epoch 20/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4028 - accuracy: 0.8325 - val_loss: 0.4172 - val_accuracy: 0.8086 Epoch 21/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3991 - accuracy: 0.8198 - val_loss: 0.4161 - val_accuracy: 0.8203 Epoch 22/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3928 - accuracy: 0.8364 - val_loss: 0.4105 - val_accuracy: 0.8281 Epoch 23/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3888 - accuracy: 0.8296 - val_loss: 0.4154 - val_accuracy: 0.8164 Epoch 24/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3770 - accuracy: 0.8315 - val_loss: 0.4159 - val_accuracy: 0.8164 Epoch 25/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3877 - accuracy: 0.8355 - val_loss: 0.4118 - val_accuracy: 0.8203 Epoch 26/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3877 - accuracy: 0.8325 - val_loss: 0.4138 - val_accuracy: 0.8125 Epoch 27/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3881 - accuracy: 0.8462 - val_loss: 0.4194 - val_accuracy: 0.8164 Epoch 28/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3734 - accuracy: 0.8462 - val_loss: 0.4199 - val_accuracy: 0.8125 Epoch 29/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3852 - accuracy: 0.8315 - val_loss: 0.4188 - val_accuracy: 0.8125 Epoch 30/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3814 - accuracy: 0.8413 - val_loss: 0.4158 - val_accuracy: 0.8125 Epoch 31/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3737 - accuracy: 0.8384 - val_loss: 0.4148 - val_accuracy: 0.8203 Epoch 32/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3691 - accuracy: 0.8404 - val_loss: 0.4164 - val_accuracy: 0.8281 Epoch 33/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3653 - accuracy: 0.8364 - val_loss: 0.4194 - val_accuracy: 0.8164 Epoch 34/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3630 - accuracy: 0.8550 - val_loss: 0.4188 - val_accuracy: 0.8125 Epoch 35/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3740 - accuracy: 0.8443 - val_loss: 0.4209 - val_accuracy: 0.8086 Epoch 36/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3586 - accuracy: 0.8531 - val_loss: 0.4174 - val_accuracy: 0.8086 Epoch 37/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3653 - accuracy: 0.8433 - val_loss: 0.4271 - val_accuracy: 0.8008 Epoch 38/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3594 - accuracy: 0.8501 - val_loss: 0.4169 - val_accuracy: 0.8086 Epoch 39/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3578 - accuracy: 0.8599 - val_loss: 0.4215 - val_accuracy: 0.8125 Epoch 40/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3618 - accuracy: 0.8599 - val_loss: 0.4216 - val_accuracy: 0.8164 Epoch 41/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3598 - accuracy: 0.8472 - val_loss: 0.4207 - val_accuracy: 0.8242 Epoch 42/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3531 - accuracy: 0.8560 - val_loss: 0.4305 - val_accuracy: 0.7969 Epoch 43/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3459 - accuracy: 0.8570 - val_loss: 0.4280 - val_accuracy: 0.8125 Epoch 44/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3417 - accuracy: 0.8609 - val_loss: 0.4276 - val_accuracy: 0.8281 Epoch 45/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3412 - accuracy: 0.8609 - val_loss: 0.4245 - val_accuracy: 0.8203 Epoch 46/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3464 - accuracy: 0.8550 - val_loss: 0.4256 - val_accuracy: 0.8164 Epoch 47/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3411 - accuracy: 0.8727 - val_loss: 0.4186 - val_accuracy: 0.8203 Epoch 48/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3311 - accuracy: 0.8697 - val_loss: 0.4316 - val_accuracy: 0.8164 Epoch 49/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3309 - accuracy: 0.8658 - val_loss: 0.4386 - val_accuracy: 0.8086 Epoch 50/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3357 - accuracy: 0.8688 - val_loss: 0.4332 - val_accuracy: 0.8320 Epoch 51/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3234 - accuracy: 0.8746 - val_loss: 0.4371 - val_accuracy: 0.7969 Epoch 52/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3368 - accuracy: 0.8668 - val_loss: 0.4277 - val_accuracy: 0.8008 Epoch 53/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3308 - accuracy: 0.8707 - val_loss: 0.4309 - val_accuracy: 0.8086 Epoch 54/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3254 - accuracy: 0.8786 - val_loss: 0.4318 - val_accuracy: 0.8242 Epoch 55/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3352 - accuracy: 0.8658 - val_loss: 0.4356 - val_accuracy: 0.8086 Epoch 56/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3234 - accuracy: 0.8697 - val_loss: 0.4442 - val_accuracy: 0.8008 Epoch 57/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3307 - accuracy: 0.8639 - val_loss: 0.4389 - val_accuracy: 0.8203 Epoch 58/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3220 - accuracy: 0.8795 - val_loss: 0.4365 - val_accuracy: 0.8125 Epoch 59/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3291 - accuracy: 0.8697 - val_loss: 0.4403 - val_accuracy: 0.8086 Epoch 60/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3275 - accuracy: 0.8727 - val_loss: 0.4436 - val_accuracy: 0.8164 Epoch 61/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3128 - accuracy: 0.8717 - val_loss: 0.4542 - val_accuracy: 0.8008 Epoch 62/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3194 - accuracy: 0.8766 - val_loss: 0.4551 - val_accuracy: 0.7969 Epoch 63/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3048 - accuracy: 0.8795 - val_loss: 0.4552 - val_accuracy: 0.7969 Epoch 64/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3216 - accuracy: 0.8717 - val_loss: 0.4605 - val_accuracy: 0.8164 Epoch 65/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3073 - accuracy: 0.8786 - val_loss: 0.4638 - val_accuracy: 0.8047 Epoch 66/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3125 - accuracy: 0.8756 - val_loss: 0.4667 - val_accuracy: 0.8125 Epoch 67/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3114 - accuracy: 0.8786 - val_loss: 0.4631 - val_accuracy: 0.8164 Epoch 68/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3106 - accuracy: 0.8766 - val_loss: 0.4658 - val_accuracy: 0.7930 Epoch 69/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3185 - accuracy: 0.8776 - val_loss: 0.4628 - val_accuracy: 0.7969 Epoch 70/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3215 - accuracy: 0.8697 - val_loss: 0.4624 - val_accuracy: 0.7891 Epoch 71/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2972 - accuracy: 0.8864 - val_loss: 0.4591 - val_accuracy: 0.8164 Epoch 72/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2920 - accuracy: 0.8805 - val_loss: 0.4708 - val_accuracy: 0.7930 Epoch 73/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3172 - accuracy: 0.8639 - val_loss: 0.4647 - val_accuracy: 0.8008 Epoch 74/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3014 - accuracy: 0.8874 - val_loss: 0.4619 - val_accuracy: 0.7969 Epoch 75/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2933 - accuracy: 0.8981 - val_loss: 0.4635 - val_accuracy: 0.8164 Epoch 76/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3058 - accuracy: 0.8854 - val_loss: 0.4743 - val_accuracy: 0.7969 Epoch 77/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2889 - accuracy: 0.8942 - val_loss: 0.4687 - val_accuracy: 0.8125 Epoch 78/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2892 - accuracy: 0.8874 - val_loss: 0.4775 - val_accuracy: 0.7969 Epoch 79/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2867 - accuracy: 0.8854 - val_loss: 0.4870 - val_accuracy: 0.7891 Epoch 80/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2956 - accuracy: 0.8864 - val_loss: 0.4866 - val_accuracy: 0.7969 Epoch 81/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3032 - accuracy: 0.8883 - val_loss: 0.4668 - val_accuracy: 0.8047 Epoch 82/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2854 - accuracy: 0.8932 - val_loss: 0.4883 - val_accuracy: 0.7930 Epoch 83/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2761 - accuracy: 0.8972 - val_loss: 0.4827 - val_accuracy: 0.8086 Epoch 84/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2909 - accuracy: 0.8903 - val_loss: 0.4851 - val_accuracy: 0.8242 Epoch 85/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2785 - accuracy: 0.8883 - val_loss: 0.5055 - val_accuracy: 0.7891 Epoch 86/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2881 - accuracy: 0.9001 - val_loss: 0.5070 - val_accuracy: 0.7852 Epoch 87/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2774 - accuracy: 0.8942 - val_loss: 0.5080 - val_accuracy: 0.7891 Epoch 88/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2745 - accuracy: 0.8991 - val_loss: 0.4966 - val_accuracy: 0.8203 Epoch 89/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2812 - accuracy: 0.8913 - val_loss: 0.5183 - val_accuracy: 0.7930 Epoch 90/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2838 - accuracy: 0.8981 - val_loss: 0.4891 - val_accuracy: 0.8125 Epoch 91/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2820 - accuracy: 0.8972 - val_loss: 0.4982 - val_accuracy: 0.8125 Epoch 92/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2816 - accuracy: 0.8893 - val_loss: 0.4916 - val_accuracy: 0.8164 Epoch 93/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2922 - accuracy: 0.8923 - val_loss: 0.4832 - val_accuracy: 0.8125 Epoch 94/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2789 - accuracy: 0.8874 - val_loss: 0.5019 - val_accuracy: 0.7812 Epoch 95/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2767 - accuracy: 0.8903 - val_loss: 0.4940 - val_accuracy: 0.7852 Epoch 96/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2740 - accuracy: 0.8932 - val_loss: 0.5256 - val_accuracy: 0.7773 Epoch 97/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2639 - accuracy: 0.8991 - val_loss: 0.5100 - val_accuracy: 0.8047 Epoch 98/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2740 - accuracy: 0.9021 - val_loss: 0.5260 - val_accuracy: 0.7812 Epoch 99/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2751 - accuracy: 0.8932 - val_loss: 0.5153 - val_accuracy: 0.8008 Epoch 100/100 69/69 [==============================] - 0s 1ms/step - loss: 0.2649 - accuracy: 0.8991 - val_loss: 0.5069 - val_accuracy: 0.7891
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
# testing underfitting
# fit random under sampler on the train data
rus = RandomUnderSampler(random_state=1, sampling_strategy = 1)
X_train_un, y_train_un = rus.fit_resample(X_train, y_train)
print("Before Under Sampling, count of label '1': {}".format(sum(y_train == 1)))
print("Before Under Sampling, count of label '0': {} \n".format(sum(y_train == 0)))
print("After Under Sampling, count of label '1': {}".format(sum(y_train_un == 1)))
print("After Under Sampling, count of label '0': {} \n".format(sum(y_train_un == 0)))
print("After Under Sampling, the shape of train_X: {}".format(X_train_un.shape))
print("After Under Sampling, the shape of train_y: {} \n".format(y_train_un.shape))
Before Under Sampling, count of label '1': 1061 Before Under Sampling, count of label '0': 3407 After Under Sampling, count of label '1': 1061 After Under Sampling, count of label '0': 1061 After Under Sampling, the shape of train_X: (2122, 1351) After Under Sampling, the shape of train_y: (2122,)
# to build logstic regression model
from sklearn.linear_model import LogisticRegression
# defining the model
model = LogisticRegression(random_state = 1)
# storing accuracy values of model for every fold in "results"
results = cross_val_score(model, X_train_over, y_train_over, cv=kfold, scoring='accuracy')
# let's see the value of accuracy for every fold
print(results)
[0.8046875 0.828125 0.8046875 0.8125 0.78125 0.7890625 0.8359375 0.8503937 0.81102362 0.73228346]
# let's see the mean accuracy score
print("Accuracy: %.3f%% (%.3f%%)" % (results.mean()*100.0, results.std()*100.0))
Accuracy: 80.500% (3.123%)
from sklearn import preprocessing
# scale all the columns of the mpg_df. This will produce a numpy array
X_scaled = preprocessing.scale(X)
X_scaled = pd.DataFrame(X_scaled, columns=X.columns)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, Y, test_size=0.30, random_state=1)
regression_model = LinearRegression()
regression_model.fit(X_train, y_train)
for idx, col_name in enumerate(X_train.columns):
print("The coefficient for {} is {}".format(col_name, regression_model.coef_[idx]))
The coefficient for CreditScore is -0.008971117344083611 The coefficient for Age is 0.14869161654253046 The coefficient for Tenure is -0.006380013185686983 The coefficient for NumOfProducts is 0.015185421704473677 The coefficient for HasCrCard is -0.0011717280833360355 The coefficient for IsActiveMember is -0.0753157074456723 The coefficient for Geography_France is -6144859348862.27 The coefficient for Geography_Germany is -6110012361544.077 The coefficient for Geography_Spain is -5005820242469.596 The coefficient for Gender_Female is -7912655137696.856 The coefficient for Gender_Male is -7912655137696.893 The coefficient for Balance_label_Balance: 0 - 100181 is 1722602530809.1484 The coefficient for Balance_label_Balance: 100181 - 119839 is 1722602530809.1687 The coefficient for Balance_label_Balance: 119829 - 139512 is 1722242643093.7964 The coefficient for Balance_label_Balance: 139512 - 250898 is 1722602530809.1594 The coefficient for EstimatedSalary_label_EstSalary: 11 - 41818 is -2236014114031.007 The coefficient for EstimatedSalary_label_EstSalary: 41818 - 80414 is -2235357310618.867 The coefficient for EstimatedSalary_label_EstSalary: 80414 - 120377 is -2236014114031.0103 The coefficient for EstimatedSalary_label_EstSalary: 120377 - 160494 is -2235357310618.863 The coefficient for EstimatedSalary_label_EstSalary: 160494 - 200000 is -2236014114031.0044
ridge = Ridge(alpha=.3)
ridge.fit(X_train,y_train)
lasso = Lasso(alpha=0.3)
lasso.fit(X_train,y_train)
print("Ridge Train", ridge.score(X_train, y_train))
print("Ridge Test", ridge.score(X_test, y_test))
print("Lasso Train", lasso.score(X_train, y_train))
print("Lasso Test", lasso.score(X_test, y_test))
Ridge Train 0.18685243332145485 Ridge Test 0.14621830343063857 Lasso Train 0.0 Lasso Test -0.0006593610757554824
#Model #1
#initialize the model
model_1 = Sequential()
# This adds the input layer (by specifying input dimension) AND the first hidden layer (units)
#units below is the number of neurons in the dense layer
model_1.add(Dense(units=16, input_dim = 20,activation='relu')) # input of 10 columns as shown above
# hidden layer
model_1.add(Dense(units=24,activation='relu'))
#Adding Dropout to prevent overfitting
model_1.add(Dropout(0.5))
model_1.add(Dense(24,activation='relu'))
model_1.add(Dense(24,activation='relu'))
# Adding the output layer
# Notice that we do not need to specify input dim.
# we have an output of 1 node, which is the the desired dimensions of our output (fraud or not)
# We use the sigmoid because we want probability outcomes
model_1.add(Dense(1,activation='sigmoid'))
# Create optimizer with default learning rate
# Compile the model
model_1.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
#fitting the model
history1=model_1.fit(X_train_over,y_train_over,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 69/69 [==============================] - 1s 3ms/step - loss: 0.6036 - accuracy: 0.7336 - val_loss: 0.5197 - val_accuracy: 0.7812 Epoch 2/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5354 - accuracy: 0.7669 - val_loss: 0.5054 - val_accuracy: 0.7812 Epoch 3/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5240 - accuracy: 0.7669 - val_loss: 0.5024 - val_accuracy: 0.7812 Epoch 4/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5234 - accuracy: 0.7669 - val_loss: 0.5052 - val_accuracy: 0.7812 Epoch 5/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5104 - accuracy: 0.7669 - val_loss: 0.4880 - val_accuracy: 0.7812 Epoch 6/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5109 - accuracy: 0.7669 - val_loss: 0.4920 - val_accuracy: 0.7812 Epoch 7/100 69/69 [==============================] - 0s 1ms/step - loss: 0.5064 - accuracy: 0.7669 - val_loss: 0.4731 - val_accuracy: 0.7812 Epoch 8/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4965 - accuracy: 0.7669 - val_loss: 0.4628 - val_accuracy: 0.7812 Epoch 9/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4909 - accuracy: 0.7669 - val_loss: 0.4733 - val_accuracy: 0.7812 Epoch 10/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4976 - accuracy: 0.7669 - val_loss: 0.4559 - val_accuracy: 0.7812 Epoch 11/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4913 - accuracy: 0.7669 - val_loss: 0.4522 - val_accuracy: 0.7812 Epoch 12/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4824 - accuracy: 0.7669 - val_loss: 0.4544 - val_accuracy: 0.7812 Epoch 13/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4794 - accuracy: 0.7669 - val_loss: 0.4558 - val_accuracy: 0.7812 Epoch 14/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4777 - accuracy: 0.7669 - val_loss: 0.4425 - val_accuracy: 0.7930 Epoch 15/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4765 - accuracy: 0.7757 - val_loss: 0.4455 - val_accuracy: 0.8164 Epoch 16/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4665 - accuracy: 0.7855 - val_loss: 0.4435 - val_accuracy: 0.8203 Epoch 17/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4617 - accuracy: 0.7904 - val_loss: 0.4437 - val_accuracy: 0.8164 Epoch 18/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4605 - accuracy: 0.7904 - val_loss: 0.4419 - val_accuracy: 0.8203 Epoch 19/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4615 - accuracy: 0.8031 - val_loss: 0.4548 - val_accuracy: 0.8086 Epoch 20/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4465 - accuracy: 0.8041 - val_loss: 0.4408 - val_accuracy: 0.8086 Epoch 21/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4517 - accuracy: 0.7914 - val_loss: 0.4432 - val_accuracy: 0.8086 Epoch 22/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4455 - accuracy: 0.7982 - val_loss: 0.4407 - val_accuracy: 0.8164 Epoch 23/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4423 - accuracy: 0.8129 - val_loss: 0.4389 - val_accuracy: 0.8008 Epoch 24/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4408 - accuracy: 0.8071 - val_loss: 0.4494 - val_accuracy: 0.7773 Epoch 25/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4441 - accuracy: 0.8080 - val_loss: 0.4605 - val_accuracy: 0.7852 Epoch 26/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4390 - accuracy: 0.8051 - val_loss: 0.4701 - val_accuracy: 0.7734 Epoch 27/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4407 - accuracy: 0.8198 - val_loss: 0.4766 - val_accuracy: 0.7891 Epoch 28/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4249 - accuracy: 0.8208 - val_loss: 0.4578 - val_accuracy: 0.7812 Epoch 29/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4168 - accuracy: 0.8306 - val_loss: 0.4604 - val_accuracy: 0.7617 Epoch 30/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4093 - accuracy: 0.8286 - val_loss: 0.4607 - val_accuracy: 0.7812 Epoch 31/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4087 - accuracy: 0.8325 - val_loss: 0.4562 - val_accuracy: 0.7656 Epoch 32/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4242 - accuracy: 0.8208 - val_loss: 0.4659 - val_accuracy: 0.7852 Epoch 33/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4078 - accuracy: 0.8325 - val_loss: 0.4672 - val_accuracy: 0.7891 Epoch 34/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4156 - accuracy: 0.8247 - val_loss: 0.4605 - val_accuracy: 0.7656 Epoch 35/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3966 - accuracy: 0.8492 - val_loss: 0.4835 - val_accuracy: 0.7656 Epoch 36/100 69/69 [==============================] - 0s 1ms/step - loss: 0.4063 - accuracy: 0.8345 - val_loss: 0.4697 - val_accuracy: 0.7812 Epoch 37/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3906 - accuracy: 0.8394 - val_loss: 0.4965 - val_accuracy: 0.7578 Epoch 38/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3948 - accuracy: 0.8345 - val_loss: 0.4772 - val_accuracy: 0.7812 Epoch 39/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3937 - accuracy: 0.8335 - val_loss: 0.4830 - val_accuracy: 0.7852 Epoch 40/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3871 - accuracy: 0.8345 - val_loss: 0.4736 - val_accuracy: 0.7734 Epoch 41/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3845 - accuracy: 0.8404 - val_loss: 0.4722 - val_accuracy: 0.7812 Epoch 42/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3855 - accuracy: 0.8394 - val_loss: 0.5015 - val_accuracy: 0.7656 Epoch 43/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3777 - accuracy: 0.8521 - val_loss: 0.4943 - val_accuracy: 0.7617 Epoch 44/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3810 - accuracy: 0.8462 - val_loss: 0.4929 - val_accuracy: 0.7578 Epoch 45/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3732 - accuracy: 0.8590 - val_loss: 0.4939 - val_accuracy: 0.7578 Epoch 46/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3636 - accuracy: 0.8492 - val_loss: 0.5174 - val_accuracy: 0.7539 Epoch 47/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3747 - accuracy: 0.8423 - val_loss: 0.5008 - val_accuracy: 0.7656 Epoch 48/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3755 - accuracy: 0.8501 - val_loss: 0.5053 - val_accuracy: 0.7617 Epoch 49/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3740 - accuracy: 0.8443 - val_loss: 0.5179 - val_accuracy: 0.7578 Epoch 50/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3743 - accuracy: 0.8472 - val_loss: 0.4975 - val_accuracy: 0.7812 Epoch 51/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3711 - accuracy: 0.8501 - val_loss: 0.5189 - val_accuracy: 0.7617 Epoch 52/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3674 - accuracy: 0.8521 - val_loss: 0.5322 - val_accuracy: 0.7617 Epoch 53/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3533 - accuracy: 0.8560 - val_loss: 0.5147 - val_accuracy: 0.7695 Epoch 54/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3660 - accuracy: 0.8433 - val_loss: 0.5300 - val_accuracy: 0.7656 Epoch 55/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3714 - accuracy: 0.8452 - val_loss: 0.5133 - val_accuracy: 0.7734 Epoch 56/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3728 - accuracy: 0.8521 - val_loss: 0.5336 - val_accuracy: 0.7695 Epoch 57/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3691 - accuracy: 0.8511 - val_loss: 0.5331 - val_accuracy: 0.7578 Epoch 58/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3637 - accuracy: 0.8531 - val_loss: 0.5117 - val_accuracy: 0.7695 Epoch 59/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3635 - accuracy: 0.8531 - val_loss: 0.5223 - val_accuracy: 0.7656 Epoch 60/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3621 - accuracy: 0.8482 - val_loss: 0.5249 - val_accuracy: 0.7578 Epoch 61/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3496 - accuracy: 0.8560 - val_loss: 0.5357 - val_accuracy: 0.7578 Epoch 62/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3595 - accuracy: 0.8511 - val_loss: 0.5520 - val_accuracy: 0.7422 Epoch 63/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3620 - accuracy: 0.8550 - val_loss: 0.5449 - val_accuracy: 0.7539 Epoch 64/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3561 - accuracy: 0.8560 - val_loss: 0.5283 - val_accuracy: 0.7617 Epoch 65/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3373 - accuracy: 0.8668 - val_loss: 0.5479 - val_accuracy: 0.7539 Epoch 66/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3587 - accuracy: 0.8580 - val_loss: 0.5448 - val_accuracy: 0.7617 Epoch 67/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3531 - accuracy: 0.8590 - val_loss: 0.5302 - val_accuracy: 0.7617 Epoch 68/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3418 - accuracy: 0.8648 - val_loss: 0.5436 - val_accuracy: 0.7656 Epoch 69/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3347 - accuracy: 0.8648 - val_loss: 0.5401 - val_accuracy: 0.7500 Epoch 70/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3357 - accuracy: 0.8668 - val_loss: 0.5524 - val_accuracy: 0.7461 Epoch 71/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3511 - accuracy: 0.8599 - val_loss: 0.5517 - val_accuracy: 0.7461 Epoch 72/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3364 - accuracy: 0.8737 - val_loss: 0.5572 - val_accuracy: 0.7539 Epoch 73/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3418 - accuracy: 0.8560 - val_loss: 0.5581 - val_accuracy: 0.7656 Epoch 74/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3387 - accuracy: 0.8580 - val_loss: 0.5664 - val_accuracy: 0.7695 Epoch 75/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3323 - accuracy: 0.8639 - val_loss: 0.5745 - val_accuracy: 0.7461 Epoch 76/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3390 - accuracy: 0.8648 - val_loss: 0.5686 - val_accuracy: 0.7578 Epoch 77/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3370 - accuracy: 0.8668 - val_loss: 0.5581 - val_accuracy: 0.7656 Epoch 78/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3196 - accuracy: 0.8727 - val_loss: 0.5832 - val_accuracy: 0.7539 Epoch 79/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3369 - accuracy: 0.8697 - val_loss: 0.5641 - val_accuracy: 0.7539 Epoch 80/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3249 - accuracy: 0.8668 - val_loss: 0.5819 - val_accuracy: 0.7578 Epoch 81/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3368 - accuracy: 0.8629 - val_loss: 0.5861 - val_accuracy: 0.7578 Epoch 82/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3266 - accuracy: 0.8746 - val_loss: 0.5907 - val_accuracy: 0.7617 Epoch 83/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3270 - accuracy: 0.8697 - val_loss: 0.5972 - val_accuracy: 0.7539 Epoch 84/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3284 - accuracy: 0.8737 - val_loss: 0.5787 - val_accuracy: 0.7656 Epoch 85/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3284 - accuracy: 0.8697 - val_loss: 0.6035 - val_accuracy: 0.7500 Epoch 86/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3302 - accuracy: 0.8668 - val_loss: 0.5842 - val_accuracy: 0.7539 Epoch 87/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3099 - accuracy: 0.8795 - val_loss: 0.6017 - val_accuracy: 0.7656 Epoch 88/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3242 - accuracy: 0.8717 - val_loss: 0.5941 - val_accuracy: 0.7617 Epoch 89/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3109 - accuracy: 0.8854 - val_loss: 0.6230 - val_accuracy: 0.7656 Epoch 90/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3231 - accuracy: 0.8756 - val_loss: 0.5932 - val_accuracy: 0.7656 Epoch 91/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3164 - accuracy: 0.8737 - val_loss: 0.6060 - val_accuracy: 0.7656 Epoch 92/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3189 - accuracy: 0.8776 - val_loss: 0.5982 - val_accuracy: 0.7695 Epoch 93/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3162 - accuracy: 0.8766 - val_loss: 0.5982 - val_accuracy: 0.7812 Epoch 94/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3161 - accuracy: 0.8786 - val_loss: 0.5909 - val_accuracy: 0.7812 Epoch 95/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3112 - accuracy: 0.8737 - val_loss: 0.5961 - val_accuracy: 0.7617 Epoch 96/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3216 - accuracy: 0.8717 - val_loss: 0.5810 - val_accuracy: 0.7773 Epoch 97/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3098 - accuracy: 0.8815 - val_loss: 0.5992 - val_accuracy: 0.7617 Epoch 98/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3021 - accuracy: 0.8756 - val_loss: 0.5987 - val_accuracy: 0.7578 Epoch 99/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3078 - accuracy: 0.8746 - val_loss: 0.6213 - val_accuracy: 0.7656 Epoch 100/100 69/69 [==============================] - 0s 1ms/step - loss: 0.3119 - accuracy: 0.8776 - val_loss: 0.6104 - val_accuracy: 0.7656
plt.plot(history1.history['accuracy'])
plt.plot(history1.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
#Model #2
from keras.layers import Dense, Dropout
from keras.regularizers import l2
from keras.optimizers import Adam
model_2 = Sequential()
model_2.add(Dense(units=32, input_dim=20, activation='relu', kernel_regularizer=l2(0.01)))
model_2.add(Dense(units=64, activation='relu', kernel_regularizer=l2(0.01)))
model_2.add(Dropout(0.5))
model_2.add(Dense(units=64, activation='relu', kernel_regularizer=l2(0.01)))
model_2.add(Dense(units=64, activation='relu', kernel_regularizer=l2(0.01)))
model_2.add(Dense(1, activation='sigmoid'))
# Compile the model with a custom optimizer and learning rate
optimizer = Adam(learning_rate=0.001)
model_2.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
#fitting the model
history2=model_2.fit(X_train,y_train,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4655 - accuracy: 0.8344 - val_loss: 0.4737 - val_accuracy: 0.8356 Epoch 2/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4571 - accuracy: 0.8321 - val_loss: 0.4774 - val_accuracy: 0.8378 Epoch 3/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4566 - accuracy: 0.8369 - val_loss: 0.4732 - val_accuracy: 0.8255 Epoch 4/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4592 - accuracy: 0.8366 - val_loss: 0.4703 - val_accuracy: 0.8266 Epoch 5/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4527 - accuracy: 0.8397 - val_loss: 0.4700 - val_accuracy: 0.8389 Epoch 6/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4471 - accuracy: 0.8380 - val_loss: 0.4749 - val_accuracy: 0.8177 Epoch 7/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4504 - accuracy: 0.8369 - val_loss: 0.4661 - val_accuracy: 0.8322 Epoch 8/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4506 - accuracy: 0.8369 - val_loss: 0.4679 - val_accuracy: 0.8255 Epoch 9/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4466 - accuracy: 0.8428 - val_loss: 0.4647 - val_accuracy: 0.8277 Epoch 10/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4483 - accuracy: 0.8405 - val_loss: 0.4658 - val_accuracy: 0.8289 Epoch 11/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4448 - accuracy: 0.8425 - val_loss: 0.4583 - val_accuracy: 0.8300 Epoch 12/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4410 - accuracy: 0.8444 - val_loss: 0.4587 - val_accuracy: 0.8300 Epoch 13/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4464 - accuracy: 0.8386 - val_loss: 0.4690 - val_accuracy: 0.8300 Epoch 14/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4436 - accuracy: 0.8391 - val_loss: 0.4795 - val_accuracy: 0.8031 Epoch 15/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4469 - accuracy: 0.8397 - val_loss: 0.4571 - val_accuracy: 0.8311 Epoch 16/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4417 - accuracy: 0.8425 - val_loss: 0.4642 - val_accuracy: 0.8322 Epoch 17/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4362 - accuracy: 0.8411 - val_loss: 0.4514 - val_accuracy: 0.8356 Epoch 18/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4413 - accuracy: 0.8366 - val_loss: 0.4615 - val_accuracy: 0.8389 Epoch 19/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4444 - accuracy: 0.8411 - val_loss: 0.4567 - val_accuracy: 0.8356 Epoch 20/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4391 - accuracy: 0.8369 - val_loss: 0.4548 - val_accuracy: 0.8378 Epoch 21/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4377 - accuracy: 0.8444 - val_loss: 0.4594 - val_accuracy: 0.8177 Epoch 22/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4429 - accuracy: 0.8436 - val_loss: 0.4557 - val_accuracy: 0.8277 Epoch 23/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4352 - accuracy: 0.8453 - val_loss: 0.4564 - val_accuracy: 0.8345 Epoch 24/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4354 - accuracy: 0.8408 - val_loss: 0.4780 - val_accuracy: 0.8177 Epoch 25/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4439 - accuracy: 0.8456 - val_loss: 0.4519 - val_accuracy: 0.8322 Epoch 26/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4398 - accuracy: 0.8383 - val_loss: 0.4521 - val_accuracy: 0.8322 Epoch 27/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4387 - accuracy: 0.8383 - val_loss: 0.4599 - val_accuracy: 0.8333 Epoch 28/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4343 - accuracy: 0.8419 - val_loss: 0.4666 - val_accuracy: 0.8277 Epoch 29/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4375 - accuracy: 0.8428 - val_loss: 0.4565 - val_accuracy: 0.8277 Epoch 30/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4362 - accuracy: 0.8408 - val_loss: 0.4540 - val_accuracy: 0.8255 Epoch 31/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4368 - accuracy: 0.8456 - val_loss: 0.4610 - val_accuracy: 0.8333 Epoch 32/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4373 - accuracy: 0.8397 - val_loss: 0.4534 - val_accuracy: 0.8311 Epoch 33/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4317 - accuracy: 0.8442 - val_loss: 0.4630 - val_accuracy: 0.8311 Epoch 34/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4328 - accuracy: 0.8428 - val_loss: 0.4723 - val_accuracy: 0.8132 Epoch 35/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4345 - accuracy: 0.8419 - val_loss: 0.4541 - val_accuracy: 0.8266 Epoch 36/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4385 - accuracy: 0.8450 - val_loss: 0.4525 - val_accuracy: 0.8389 Epoch 37/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4359 - accuracy: 0.8411 - val_loss: 0.4561 - val_accuracy: 0.8322 Epoch 38/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4358 - accuracy: 0.8383 - val_loss: 0.4489 - val_accuracy: 0.8378 Epoch 39/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4319 - accuracy: 0.8450 - val_loss: 0.4692 - val_accuracy: 0.8367 Epoch 40/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4362 - accuracy: 0.8450 - val_loss: 0.4558 - val_accuracy: 0.8277 Epoch 41/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4326 - accuracy: 0.8458 - val_loss: 0.4498 - val_accuracy: 0.8356 Epoch 42/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4343 - accuracy: 0.8411 - val_loss: 0.4491 - val_accuracy: 0.8345 Epoch 43/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4315 - accuracy: 0.8388 - val_loss: 0.4528 - val_accuracy: 0.8210 Epoch 44/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4325 - accuracy: 0.8439 - val_loss: 0.4630 - val_accuracy: 0.8244 Epoch 45/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4325 - accuracy: 0.8397 - val_loss: 0.4586 - val_accuracy: 0.8289 Epoch 46/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4316 - accuracy: 0.8444 - val_loss: 0.4546 - val_accuracy: 0.8255 Epoch 47/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4334 - accuracy: 0.8461 - val_loss: 0.4601 - val_accuracy: 0.8199 Epoch 48/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4312 - accuracy: 0.8458 - val_loss: 0.4556 - val_accuracy: 0.8289 Epoch 49/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4314 - accuracy: 0.8458 - val_loss: 0.4511 - val_accuracy: 0.8255 Epoch 50/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4319 - accuracy: 0.8461 - val_loss: 0.4516 - val_accuracy: 0.8244 Epoch 51/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4309 - accuracy: 0.8408 - val_loss: 0.4523 - val_accuracy: 0.8311 Epoch 52/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4289 - accuracy: 0.8419 - val_loss: 0.4610 - val_accuracy: 0.8300 Epoch 53/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4274 - accuracy: 0.8428 - val_loss: 0.4506 - val_accuracy: 0.8333 Epoch 54/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4280 - accuracy: 0.8442 - val_loss: 0.4704 - val_accuracy: 0.8289 Epoch 55/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4315 - accuracy: 0.8402 - val_loss: 0.4641 - val_accuracy: 0.8333 Epoch 56/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4291 - accuracy: 0.8422 - val_loss: 0.4490 - val_accuracy: 0.8199 Epoch 57/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4291 - accuracy: 0.8444 - val_loss: 0.4564 - val_accuracy: 0.8300 Epoch 58/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4311 - accuracy: 0.8425 - val_loss: 0.4523 - val_accuracy: 0.8266 Epoch 59/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4282 - accuracy: 0.8430 - val_loss: 0.4520 - val_accuracy: 0.8199 Epoch 60/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4261 - accuracy: 0.8497 - val_loss: 0.4520 - val_accuracy: 0.8333 Epoch 61/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4276 - accuracy: 0.8402 - val_loss: 0.4584 - val_accuracy: 0.8221 Epoch 62/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4253 - accuracy: 0.8439 - val_loss: 0.4532 - val_accuracy: 0.8311 Epoch 63/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4325 - accuracy: 0.8414 - val_loss: 0.4562 - val_accuracy: 0.8266 Epoch 64/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4260 - accuracy: 0.8444 - val_loss: 0.4461 - val_accuracy: 0.8345 Epoch 65/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4252 - accuracy: 0.8464 - val_loss: 0.4550 - val_accuracy: 0.8210 Epoch 66/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4290 - accuracy: 0.8442 - val_loss: 0.4565 - val_accuracy: 0.8345 Epoch 67/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4249 - accuracy: 0.8458 - val_loss: 0.4498 - val_accuracy: 0.8367 Epoch 68/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4320 - accuracy: 0.8380 - val_loss: 0.4540 - val_accuracy: 0.8255 Epoch 69/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4222 - accuracy: 0.8444 - val_loss: 0.4512 - val_accuracy: 0.8233 Epoch 70/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4266 - accuracy: 0.8461 - val_loss: 0.4516 - val_accuracy: 0.8154 Epoch 71/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4247 - accuracy: 0.8478 - val_loss: 0.4484 - val_accuracy: 0.8311 Epoch 72/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4262 - accuracy: 0.8414 - val_loss: 0.4539 - val_accuracy: 0.8277 Epoch 73/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4278 - accuracy: 0.8380 - val_loss: 0.4504 - val_accuracy: 0.8244 Epoch 74/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4279 - accuracy: 0.8492 - val_loss: 0.4542 - val_accuracy: 0.8289 Epoch 75/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4283 - accuracy: 0.8461 - val_loss: 0.4472 - val_accuracy: 0.8244 Epoch 76/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4264 - accuracy: 0.8411 - val_loss: 0.4562 - val_accuracy: 0.8277 Epoch 77/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4271 - accuracy: 0.8470 - val_loss: 0.4457 - val_accuracy: 0.8266 Epoch 78/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4284 - accuracy: 0.8430 - val_loss: 0.4573 - val_accuracy: 0.8143 Epoch 79/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4239 - accuracy: 0.8430 - val_loss: 0.4610 - val_accuracy: 0.8210 Epoch 80/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4233 - accuracy: 0.8458 - val_loss: 0.4498 - val_accuracy: 0.8345 Epoch 81/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4287 - accuracy: 0.8467 - val_loss: 0.4640 - val_accuracy: 0.8121 Epoch 82/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4238 - accuracy: 0.8425 - val_loss: 0.4498 - val_accuracy: 0.8322 Epoch 83/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4259 - accuracy: 0.8374 - val_loss: 0.4545 - val_accuracy: 0.8221 Epoch 84/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4304 - accuracy: 0.8428 - val_loss: 0.4605 - val_accuracy: 0.8300 Epoch 85/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4268 - accuracy: 0.8419 - val_loss: 0.4553 - val_accuracy: 0.8300 Epoch 86/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4220 - accuracy: 0.8497 - val_loss: 0.4534 - val_accuracy: 0.8244 Epoch 87/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4234 - accuracy: 0.8447 - val_loss: 0.4565 - val_accuracy: 0.8244 Epoch 88/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4231 - accuracy: 0.8425 - val_loss: 0.4556 - val_accuracy: 0.8289 Epoch 89/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4266 - accuracy: 0.8433 - val_loss: 0.4514 - val_accuracy: 0.8266 Epoch 90/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4230 - accuracy: 0.8411 - val_loss: 0.4535 - val_accuracy: 0.8255 Epoch 91/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4242 - accuracy: 0.8450 - val_loss: 0.4531 - val_accuracy: 0.8322 Epoch 92/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4248 - accuracy: 0.8450 - val_loss: 0.4580 - val_accuracy: 0.8210 Epoch 93/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4259 - accuracy: 0.8458 - val_loss: 0.4482 - val_accuracy: 0.8255 Epoch 94/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4236 - accuracy: 0.8453 - val_loss: 0.4583 - val_accuracy: 0.8289 Epoch 95/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4207 - accuracy: 0.8470 - val_loss: 0.4482 - val_accuracy: 0.8300 Epoch 96/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4210 - accuracy: 0.8419 - val_loss: 0.4493 - val_accuracy: 0.8300 Epoch 97/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4209 - accuracy: 0.8444 - val_loss: 0.4533 - val_accuracy: 0.8255 Epoch 98/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4251 - accuracy: 0.8447 - val_loss: 0.4492 - val_accuracy: 0.8277 Epoch 99/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4212 - accuracy: 0.8475 - val_loss: 0.4502 - val_accuracy: 0.8255 Epoch 100/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4206 - accuracy: 0.8442 - val_loss: 0.4537 - val_accuracy: 0.8300
plt.plot(history2.history['accuracy'])
plt.plot(history2.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
#Model #3
#initialize the model
model_3 = Sequential()
# This adds the input layer (by specifying input dimension) AND the first hidden layer (units)
#units below is the number of neurons in the dense layer
model_3.add(Dense(units=12, input_dim = 20,activation='relu')) # input of 10 columns as shown above
# hidden layer
model_3.add(Dense(units=12,activation='relu'))
#Adding Dropout to prevent overfitting
model_3.add(Dropout(0.5))
model_3.add(Dense(16,activation='relu'))
model_3.add(Dense(16,activation='relu'))
# Adding the output layer
# Notice that we do not need to specify input dim.
# we have an output of 1 node, which is the the desired dimensions of our output (fraud or not)
# We use the sigmoid because we want probability outcomes
model_3.add(Dense(1,activation='sigmoid'))
# Create optimizer with default learning rate
# Compile the model
model_3.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
#fitting the model
history3=model_3.fit(X_train,y_train,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 239/239 [==============================] - 1s 2ms/step - loss: 0.5536 - accuracy: 0.7613 - val_loss: 0.5223 - val_accuracy: 0.7606 Epoch 2/100 239/239 [==============================] - 0s 1ms/step - loss: 0.5092 - accuracy: 0.7675 - val_loss: 0.5034 - val_accuracy: 0.7640 Epoch 3/100 239/239 [==============================] - 0s 930us/step - loss: 0.4923 - accuracy: 0.7711 - val_loss: 0.4925 - val_accuracy: 0.7673 Epoch 4/100 239/239 [==============================] - 0s 920us/step - loss: 0.4765 - accuracy: 0.7790 - val_loss: 0.4891 - val_accuracy: 0.7785 Epoch 5/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4675 - accuracy: 0.7871 - val_loss: 0.4808 - val_accuracy: 0.7852 Epoch 6/100 239/239 [==============================] - 0s 935us/step - loss: 0.4653 - accuracy: 0.7818 - val_loss: 0.4759 - val_accuracy: 0.7841 Epoch 7/100 239/239 [==============================] - 0s 930us/step - loss: 0.4620 - accuracy: 0.7832 - val_loss: 0.4727 - val_accuracy: 0.7886 Epoch 8/100 239/239 [==============================] - 0s 905us/step - loss: 0.4536 - accuracy: 0.7834 - val_loss: 0.4772 - val_accuracy: 0.7819 Epoch 9/100 239/239 [==============================] - 0s 908us/step - loss: 0.4539 - accuracy: 0.7848 - val_loss: 0.4681 - val_accuracy: 0.7864 Epoch 10/100 239/239 [==============================] - 0s 923us/step - loss: 0.4525 - accuracy: 0.7815 - val_loss: 0.4638 - val_accuracy: 0.7953 Epoch 11/100 239/239 [==============================] - 0s 980us/step - loss: 0.4425 - accuracy: 0.7941 - val_loss: 0.4653 - val_accuracy: 0.7919 Epoch 12/100 239/239 [==============================] - 0s 916us/step - loss: 0.4373 - accuracy: 0.7963 - val_loss: 0.4673 - val_accuracy: 0.7942 Epoch 13/100 239/239 [==============================] - 0s 909us/step - loss: 0.4357 - accuracy: 0.8123 - val_loss: 0.4584 - val_accuracy: 0.8098 Epoch 14/100 239/239 [==============================] - 0s 922us/step - loss: 0.4305 - accuracy: 0.8109 - val_loss: 0.4592 - val_accuracy: 0.8009 Epoch 15/100 239/239 [==============================] - 0s 974us/step - loss: 0.4266 - accuracy: 0.8170 - val_loss: 0.4548 - val_accuracy: 0.8098 Epoch 16/100 239/239 [==============================] - 0s 988us/step - loss: 0.4231 - accuracy: 0.8120 - val_loss: 0.4517 - val_accuracy: 0.8076 Epoch 17/100 239/239 [==============================] - 0s 948us/step - loss: 0.4218 - accuracy: 0.8125 - val_loss: 0.4495 - val_accuracy: 0.8132 Epoch 18/100 239/239 [==============================] - 0s 984us/step - loss: 0.4154 - accuracy: 0.8223 - val_loss: 0.4466 - val_accuracy: 0.8177 Epoch 19/100 239/239 [==============================] - 0s 947us/step - loss: 0.4131 - accuracy: 0.8215 - val_loss: 0.4379 - val_accuracy: 0.8098 Epoch 20/100 239/239 [==============================] - 0s 963us/step - loss: 0.4066 - accuracy: 0.8251 - val_loss: 0.4319 - val_accuracy: 0.8289 Epoch 21/100 239/239 [==============================] - 0s 907us/step - loss: 0.4044 - accuracy: 0.8296 - val_loss: 0.4283 - val_accuracy: 0.8289 Epoch 22/100 239/239 [==============================] - 0s 922us/step - loss: 0.4043 - accuracy: 0.8257 - val_loss: 0.4254 - val_accuracy: 0.8221 Epoch 23/100 239/239 [==============================] - 0s 926us/step - loss: 0.4054 - accuracy: 0.8262 - val_loss: 0.4317 - val_accuracy: 0.8221 Epoch 24/100 239/239 [==============================] - 0s 919us/step - loss: 0.3944 - accuracy: 0.8360 - val_loss: 0.4357 - val_accuracy: 0.8233 Epoch 25/100 239/239 [==============================] - 0s 914us/step - loss: 0.3949 - accuracy: 0.8338 - val_loss: 0.4381 - val_accuracy: 0.8244 Epoch 26/100 239/239 [==============================] - 0s 926us/step - loss: 0.3979 - accuracy: 0.8335 - val_loss: 0.4270 - val_accuracy: 0.8255 Epoch 27/100 239/239 [==============================] - 0s 914us/step - loss: 0.3939 - accuracy: 0.8330 - val_loss: 0.4270 - val_accuracy: 0.8266 Epoch 28/100 239/239 [==============================] - 0s 957us/step - loss: 0.3978 - accuracy: 0.8338 - val_loss: 0.4311 - val_accuracy: 0.8221 Epoch 29/100 239/239 [==============================] - 0s 928us/step - loss: 0.3880 - accuracy: 0.8414 - val_loss: 0.4196 - val_accuracy: 0.8356 Epoch 30/100 239/239 [==============================] - 0s 911us/step - loss: 0.3889 - accuracy: 0.8330 - val_loss: 0.4249 - val_accuracy: 0.8345 Epoch 31/100 239/239 [==============================] - 0s 938us/step - loss: 0.3927 - accuracy: 0.8374 - val_loss: 0.4225 - val_accuracy: 0.8367 Epoch 32/100 239/239 [==============================] - 0s 923us/step - loss: 0.3879 - accuracy: 0.8355 - val_loss: 0.4248 - val_accuracy: 0.8322 Epoch 33/100 239/239 [==============================] - 0s 888us/step - loss: 0.3856 - accuracy: 0.8380 - val_loss: 0.4196 - val_accuracy: 0.8400 Epoch 34/100 239/239 [==============================] - 0s 897us/step - loss: 0.3791 - accuracy: 0.8388 - val_loss: 0.4226 - val_accuracy: 0.8322 Epoch 35/100 239/239 [==============================] - 0s 944us/step - loss: 0.3830 - accuracy: 0.8394 - val_loss: 0.4196 - val_accuracy: 0.8356 Epoch 36/100 239/239 [==============================] - 0s 904us/step - loss: 0.3789 - accuracy: 0.8400 - val_loss: 0.4148 - val_accuracy: 0.8389 Epoch 37/100 239/239 [==============================] - 0s 890us/step - loss: 0.3801 - accuracy: 0.8433 - val_loss: 0.4163 - val_accuracy: 0.8356 Epoch 38/100 239/239 [==============================] - 0s 896us/step - loss: 0.3850 - accuracy: 0.8388 - val_loss: 0.4196 - val_accuracy: 0.8345 Epoch 39/100 239/239 [==============================] - 0s 884us/step - loss: 0.3767 - accuracy: 0.8481 - val_loss: 0.4130 - val_accuracy: 0.8333 Epoch 40/100 239/239 [==============================] - 0s 890us/step - loss: 0.3775 - accuracy: 0.8428 - val_loss: 0.4148 - val_accuracy: 0.8412 Epoch 41/100 239/239 [==============================] - 0s 884us/step - loss: 0.3724 - accuracy: 0.8456 - val_loss: 0.4297 - val_accuracy: 0.8356 Epoch 42/100 239/239 [==============================] - 0s 988us/step - loss: 0.3794 - accuracy: 0.8444 - val_loss: 0.4197 - val_accuracy: 0.8345 Epoch 43/100 239/239 [==============================] - 0s 883us/step - loss: 0.3818 - accuracy: 0.8386 - val_loss: 0.4271 - val_accuracy: 0.8300 Epoch 44/100 239/239 [==============================] - 0s 883us/step - loss: 0.3782 - accuracy: 0.8422 - val_loss: 0.4232 - val_accuracy: 0.8378 Epoch 45/100 239/239 [==============================] - 0s 975us/step - loss: 0.3777 - accuracy: 0.8481 - val_loss: 0.4356 - val_accuracy: 0.8311 Epoch 46/100 239/239 [==============================] - 0s 893us/step - loss: 0.3736 - accuracy: 0.8472 - val_loss: 0.4205 - val_accuracy: 0.8367 Epoch 47/100 239/239 [==============================] - 0s 901us/step - loss: 0.3733 - accuracy: 0.8461 - val_loss: 0.4162 - val_accuracy: 0.8345 Epoch 48/100 239/239 [==============================] - 0s 887us/step - loss: 0.3769 - accuracy: 0.8442 - val_loss: 0.4257 - val_accuracy: 0.8367 Epoch 49/100 239/239 [==============================] - 0s 888us/step - loss: 0.3763 - accuracy: 0.8439 - val_loss: 0.4178 - val_accuracy: 0.8389 Epoch 50/100 239/239 [==============================] - 0s 903us/step - loss: 0.3737 - accuracy: 0.8486 - val_loss: 0.4199 - val_accuracy: 0.8345 Epoch 51/100 239/239 [==============================] - 0s 893us/step - loss: 0.3703 - accuracy: 0.8483 - val_loss: 0.4251 - val_accuracy: 0.8356 Epoch 52/100 239/239 [==============================] - 0s 901us/step - loss: 0.3728 - accuracy: 0.8481 - val_loss: 0.4146 - val_accuracy: 0.8378 Epoch 53/100 239/239 [==============================] - 0s 883us/step - loss: 0.3681 - accuracy: 0.8514 - val_loss: 0.4169 - val_accuracy: 0.8322 Epoch 54/100 239/239 [==============================] - 0s 906us/step - loss: 0.3735 - accuracy: 0.8428 - val_loss: 0.4107 - val_accuracy: 0.8378 Epoch 55/100 239/239 [==============================] - 0s 909us/step - loss: 0.3717 - accuracy: 0.8492 - val_loss: 0.4156 - val_accuracy: 0.8356 Epoch 56/100 239/239 [==============================] - 0s 916us/step - loss: 0.3699 - accuracy: 0.8492 - val_loss: 0.4183 - val_accuracy: 0.8389 Epoch 57/100 239/239 [==============================] - 0s 905us/step - loss: 0.3650 - accuracy: 0.8528 - val_loss: 0.4203 - val_accuracy: 0.8311 Epoch 58/100 239/239 [==============================] - 0s 890us/step - loss: 0.3659 - accuracy: 0.8503 - val_loss: 0.4236 - val_accuracy: 0.8277 Epoch 59/100 239/239 [==============================] - 0s 912us/step - loss: 0.3685 - accuracy: 0.8514 - val_loss: 0.4257 - val_accuracy: 0.8322 Epoch 60/100 239/239 [==============================] - 0s 882us/step - loss: 0.3699 - accuracy: 0.8475 - val_loss: 0.4141 - val_accuracy: 0.8400 Epoch 61/100 239/239 [==============================] - 0s 889us/step - loss: 0.3657 - accuracy: 0.8503 - val_loss: 0.4143 - val_accuracy: 0.8412 Epoch 62/100 239/239 [==============================] - 0s 880us/step - loss: 0.3693 - accuracy: 0.8464 - val_loss: 0.4189 - val_accuracy: 0.8333 Epoch 63/100 239/239 [==============================] - 0s 885us/step - loss: 0.3740 - accuracy: 0.8456 - val_loss: 0.4218 - val_accuracy: 0.8434 Epoch 64/100 239/239 [==============================] - 0s 882us/step - loss: 0.3679 - accuracy: 0.8517 - val_loss: 0.4165 - val_accuracy: 0.8434 Epoch 65/100 239/239 [==============================] - 0s 891us/step - loss: 0.3684 - accuracy: 0.8450 - val_loss: 0.4230 - val_accuracy: 0.8423 Epoch 66/100 239/239 [==============================] - 0s 922us/step - loss: 0.3663 - accuracy: 0.8500 - val_loss: 0.4208 - val_accuracy: 0.8412 Epoch 67/100 239/239 [==============================] - 0s 894us/step - loss: 0.3672 - accuracy: 0.8492 - val_loss: 0.4108 - val_accuracy: 0.8412 Epoch 68/100 239/239 [==============================] - 0s 889us/step - loss: 0.3656 - accuracy: 0.8509 - val_loss: 0.4150 - val_accuracy: 0.8434 Epoch 69/100 239/239 [==============================] - 0s 912us/step - loss: 0.3608 - accuracy: 0.8548 - val_loss: 0.4190 - val_accuracy: 0.8300 Epoch 70/100 239/239 [==============================] - 0s 907us/step - loss: 0.3652 - accuracy: 0.8503 - val_loss: 0.4137 - val_accuracy: 0.8400 Epoch 71/100 239/239 [==============================] - 0s 887us/step - loss: 0.3666 - accuracy: 0.8475 - val_loss: 0.4287 - val_accuracy: 0.8356 Epoch 72/100 239/239 [==============================] - 0s 889us/step - loss: 0.3649 - accuracy: 0.8509 - val_loss: 0.4198 - val_accuracy: 0.8345 Epoch 73/100 239/239 [==============================] - 0s 885us/step - loss: 0.3631 - accuracy: 0.8559 - val_loss: 0.4174 - val_accuracy: 0.8367 Epoch 74/100 239/239 [==============================] - 0s 904us/step - loss: 0.3679 - accuracy: 0.8481 - val_loss: 0.4114 - val_accuracy: 0.8445 Epoch 75/100 239/239 [==============================] - 0s 921us/step - loss: 0.3598 - accuracy: 0.8539 - val_loss: 0.4127 - val_accuracy: 0.8378 Epoch 76/100 239/239 [==============================] - 0s 882us/step - loss: 0.3634 - accuracy: 0.8534 - val_loss: 0.4094 - val_accuracy: 0.8423 Epoch 77/100 239/239 [==============================] - 0s 887us/step - loss: 0.3625 - accuracy: 0.8548 - val_loss: 0.4116 - val_accuracy: 0.8412 Epoch 78/100 239/239 [==============================] - 0s 902us/step - loss: 0.3687 - accuracy: 0.8509 - val_loss: 0.4253 - val_accuracy: 0.8322 Epoch 79/100 239/239 [==============================] - 0s 898us/step - loss: 0.3609 - accuracy: 0.8528 - val_loss: 0.4155 - val_accuracy: 0.8356 Epoch 80/100 239/239 [==============================] - 0s 898us/step - loss: 0.3603 - accuracy: 0.8567 - val_loss: 0.4232 - val_accuracy: 0.8300 Epoch 81/100 239/239 [==============================] - 0s 888us/step - loss: 0.3645 - accuracy: 0.8509 - val_loss: 0.4211 - val_accuracy: 0.8378 Epoch 82/100 239/239 [==============================] - 0s 890us/step - loss: 0.3629 - accuracy: 0.8509 - val_loss: 0.4137 - val_accuracy: 0.8378 Epoch 83/100 239/239 [==============================] - 0s 897us/step - loss: 0.3633 - accuracy: 0.8497 - val_loss: 0.4190 - val_accuracy: 0.8378 Epoch 84/100 239/239 [==============================] - 0s 886us/step - loss: 0.3697 - accuracy: 0.8489 - val_loss: 0.4235 - val_accuracy: 0.8412 Epoch 85/100 239/239 [==============================] - 0s 884us/step - loss: 0.3619 - accuracy: 0.8539 - val_loss: 0.4254 - val_accuracy: 0.8311 Epoch 86/100 239/239 [==============================] - 0s 884us/step - loss: 0.3625 - accuracy: 0.8551 - val_loss: 0.4155 - val_accuracy: 0.8367 Epoch 87/100 239/239 [==============================] - 0s 884us/step - loss: 0.3642 - accuracy: 0.8545 - val_loss: 0.4164 - val_accuracy: 0.8378 Epoch 88/100 239/239 [==============================] - 0s 964us/step - loss: 0.3625 - accuracy: 0.8525 - val_loss: 0.4152 - val_accuracy: 0.8400 Epoch 89/100 239/239 [==============================] - 0s 962us/step - loss: 0.3629 - accuracy: 0.8531 - val_loss: 0.4155 - val_accuracy: 0.8345 Epoch 90/100 239/239 [==============================] - 0s 928us/step - loss: 0.3622 - accuracy: 0.8528 - val_loss: 0.4152 - val_accuracy: 0.8345 Epoch 91/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3619 - accuracy: 0.8497 - val_loss: 0.4216 - val_accuracy: 0.8345 Epoch 92/100 239/239 [==============================] - 0s 966us/step - loss: 0.3620 - accuracy: 0.8528 - val_loss: 0.4186 - val_accuracy: 0.8367 Epoch 93/100 239/239 [==============================] - 0s 918us/step - loss: 0.3578 - accuracy: 0.8593 - val_loss: 0.4209 - val_accuracy: 0.8356 Epoch 94/100 239/239 [==============================] - 0s 910us/step - loss: 0.3676 - accuracy: 0.8464 - val_loss: 0.4167 - val_accuracy: 0.8333 Epoch 95/100 239/239 [==============================] - 0s 979us/step - loss: 0.3639 - accuracy: 0.8545 - val_loss: 0.4162 - val_accuracy: 0.8367 Epoch 96/100 239/239 [==============================] - 0s 960us/step - loss: 0.3602 - accuracy: 0.8581 - val_loss: 0.4117 - val_accuracy: 0.8400 Epoch 97/100 239/239 [==============================] - 0s 955us/step - loss: 0.3588 - accuracy: 0.8539 - val_loss: 0.4203 - val_accuracy: 0.8378 Epoch 98/100 239/239 [==============================] - 0s 971us/step - loss: 0.3589 - accuracy: 0.8537 - val_loss: 0.4232 - val_accuracy: 0.8378 Epoch 99/100 239/239 [==============================] - 0s 972us/step - loss: 0.3647 - accuracy: 0.8509 - val_loss: 0.4251 - val_accuracy: 0.8345 Epoch 100/100 239/239 [==============================] - 0s 996us/step - loss: 0.3648 - accuracy: 0.8509 - val_loss: 0.4091 - val_accuracy: 0.8456
plt.plot(history3.history['accuracy'])
plt.plot(history3.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
#Model 4
# Fixing the seed for random number generators
np.random.seed(42)
import random
random.seed(42)
tf.random.set_seed(42)
model_4 = Sequential()
model_4.add(Dense(units=12, input_dim=20, activation='relu'))
model_4.add(Dense(64, activation='tanh', input_shape=(11,)))
model_4.add(Dropout(0.1))
model_4.add(Dense(32, activation='tanh'))
model_4.add(Dropout(0.1))
model_4.add(Dense(16, activation='tanh'))
model_4.add(Dense(1, activation='sigmoid'))
model_4.compile(loss = 'binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model_4.summary()
Model: "sequential_37"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_205 (Dense) (None, 12) 252
dense_206 (Dense) (None, 64) 832
dropout_49 (Dropout) (None, 64) 0
dense_207 (Dense) (None, 32) 2080
dropout_50 (Dropout) (None, 32) 0
dense_208 (Dense) (None, 16) 528
dense_209 (Dense) (None, 1) 17
=================================================================
Total params: 3,709
Trainable params: 3,709
Non-trainable params: 0
_________________________________________________________________
#fitting the model
history4=model_4.fit(X_train,y_train,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 239/239 [==============================] - 1s 2ms/step - loss: 0.5086 - accuracy: 0.7602 - val_loss: 0.4936 - val_accuracy: 0.7707 Epoch 2/100 239/239 [==============================] - 0s 949us/step - loss: 0.4624 - accuracy: 0.7885 - val_loss: 0.4881 - val_accuracy: 0.7673 Epoch 3/100 239/239 [==============================] - 0s 942us/step - loss: 0.4513 - accuracy: 0.7955 - val_loss: 0.4780 - val_accuracy: 0.7785 Epoch 4/100 239/239 [==============================] - 0s 939us/step - loss: 0.4405 - accuracy: 0.8030 - val_loss: 0.4712 - val_accuracy: 0.7796 Epoch 5/100 239/239 [==============================] - 0s 929us/step - loss: 0.4294 - accuracy: 0.8083 - val_loss: 0.4678 - val_accuracy: 0.7852 Epoch 6/100 239/239 [==============================] - 0s 933us/step - loss: 0.4215 - accuracy: 0.8176 - val_loss: 0.4542 - val_accuracy: 0.7919 Epoch 7/100 239/239 [==============================] - 0s 954us/step - loss: 0.4157 - accuracy: 0.8215 - val_loss: 0.4535 - val_accuracy: 0.7908 Epoch 8/100 239/239 [==============================] - 0s 942us/step - loss: 0.4114 - accuracy: 0.8209 - val_loss: 0.4449 - val_accuracy: 0.8031 Epoch 9/100 239/239 [==============================] - 0s 978us/step - loss: 0.3996 - accuracy: 0.8310 - val_loss: 0.4456 - val_accuracy: 0.8031 Epoch 10/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3973 - accuracy: 0.8290 - val_loss: 0.4432 - val_accuracy: 0.8076 Epoch 11/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3912 - accuracy: 0.8369 - val_loss: 0.4362 - val_accuracy: 0.8110 Epoch 12/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3907 - accuracy: 0.8380 - val_loss: 0.4367 - val_accuracy: 0.8121 Epoch 13/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3856 - accuracy: 0.8369 - val_loss: 0.4329 - val_accuracy: 0.8098 Epoch 14/100 239/239 [==============================] - 0s 967us/step - loss: 0.3821 - accuracy: 0.8411 - val_loss: 0.4302 - val_accuracy: 0.8110 Epoch 15/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3796 - accuracy: 0.8411 - val_loss: 0.4340 - val_accuracy: 0.8065 Epoch 16/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3761 - accuracy: 0.8422 - val_loss: 0.4281 - val_accuracy: 0.8199 Epoch 17/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3731 - accuracy: 0.8472 - val_loss: 0.4238 - val_accuracy: 0.8132 Epoch 18/100 239/239 [==============================] - 0s 957us/step - loss: 0.3705 - accuracy: 0.8456 - val_loss: 0.4217 - val_accuracy: 0.8188 Epoch 19/100 239/239 [==============================] - 0s 967us/step - loss: 0.3698 - accuracy: 0.8478 - val_loss: 0.4253 - val_accuracy: 0.8210 Epoch 20/100 239/239 [==============================] - 0s 971us/step - loss: 0.3633 - accuracy: 0.8489 - val_loss: 0.4279 - val_accuracy: 0.8110 Epoch 21/100 239/239 [==============================] - 0s 954us/step - loss: 0.3658 - accuracy: 0.8444 - val_loss: 0.4316 - val_accuracy: 0.8188 Epoch 22/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3590 - accuracy: 0.8509 - val_loss: 0.4390 - val_accuracy: 0.8132 Epoch 23/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3642 - accuracy: 0.8481 - val_loss: 0.4218 - val_accuracy: 0.8210 Epoch 24/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3595 - accuracy: 0.8489 - val_loss: 0.4244 - val_accuracy: 0.8188 Epoch 25/100 239/239 [==============================] - 0s 939us/step - loss: 0.3590 - accuracy: 0.8489 - val_loss: 0.4221 - val_accuracy: 0.8210 Epoch 26/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3579 - accuracy: 0.8523 - val_loss: 0.4303 - val_accuracy: 0.8154 Epoch 27/100 239/239 [==============================] - 0s 993us/step - loss: 0.3557 - accuracy: 0.8489 - val_loss: 0.4245 - val_accuracy: 0.8188 Epoch 28/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3554 - accuracy: 0.8511 - val_loss: 0.4391 - val_accuracy: 0.8098 Epoch 29/100 239/239 [==============================] - 0s 989us/step - loss: 0.3558 - accuracy: 0.8506 - val_loss: 0.4308 - val_accuracy: 0.8154 Epoch 30/100 239/239 [==============================] - 0s 981us/step - loss: 0.3540 - accuracy: 0.8517 - val_loss: 0.4429 - val_accuracy: 0.8054 Epoch 31/100 239/239 [==============================] - 0s 978us/step - loss: 0.3553 - accuracy: 0.8517 - val_loss: 0.4311 - val_accuracy: 0.8110 Epoch 32/100 239/239 [==============================] - 0s 950us/step - loss: 0.3514 - accuracy: 0.8556 - val_loss: 0.4290 - val_accuracy: 0.8154 Epoch 33/100 239/239 [==============================] - 0s 961us/step - loss: 0.3489 - accuracy: 0.8534 - val_loss: 0.4442 - val_accuracy: 0.8143 Epoch 34/100 239/239 [==============================] - 0s 975us/step - loss: 0.3498 - accuracy: 0.8537 - val_loss: 0.4287 - val_accuracy: 0.8132 Epoch 35/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3466 - accuracy: 0.8576 - val_loss: 0.4365 - val_accuracy: 0.8177 Epoch 36/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3456 - accuracy: 0.8531 - val_loss: 0.4379 - val_accuracy: 0.8177 Epoch 37/100 239/239 [==============================] - 0s 949us/step - loss: 0.3458 - accuracy: 0.8573 - val_loss: 0.4325 - val_accuracy: 0.8076 Epoch 38/100 239/239 [==============================] - 0s 956us/step - loss: 0.3435 - accuracy: 0.8556 - val_loss: 0.4270 - val_accuracy: 0.8166 Epoch 39/100 239/239 [==============================] - 0s 962us/step - loss: 0.3432 - accuracy: 0.8556 - val_loss: 0.4435 - val_accuracy: 0.8188 Epoch 40/100 239/239 [==============================] - 0s 933us/step - loss: 0.3445 - accuracy: 0.8559 - val_loss: 0.4586 - val_accuracy: 0.8031 Epoch 41/100 239/239 [==============================] - 0s 941us/step - loss: 0.3422 - accuracy: 0.8537 - val_loss: 0.4468 - val_accuracy: 0.8020 Epoch 42/100 239/239 [==============================] - 0s 943us/step - loss: 0.3382 - accuracy: 0.8576 - val_loss: 0.4451 - val_accuracy: 0.8076 Epoch 43/100 239/239 [==============================] - 0s 938us/step - loss: 0.3363 - accuracy: 0.8579 - val_loss: 0.4459 - val_accuracy: 0.8087 Epoch 44/100 239/239 [==============================] - 0s 940us/step - loss: 0.3368 - accuracy: 0.8601 - val_loss: 0.4569 - val_accuracy: 0.8110 Epoch 45/100 239/239 [==============================] - 0s 944us/step - loss: 0.3350 - accuracy: 0.8581 - val_loss: 0.4476 - val_accuracy: 0.8076 Epoch 46/100 239/239 [==============================] - 0s 948us/step - loss: 0.3374 - accuracy: 0.8565 - val_loss: 0.4474 - val_accuracy: 0.8087 Epoch 47/100 239/239 [==============================] - 0s 983us/step - loss: 0.3339 - accuracy: 0.8579 - val_loss: 0.4539 - val_accuracy: 0.8087 Epoch 48/100 239/239 [==============================] - 0s 932us/step - loss: 0.3360 - accuracy: 0.8584 - val_loss: 0.4670 - val_accuracy: 0.8043 Epoch 49/100 239/239 [==============================] - 0s 955us/step - loss: 0.3349 - accuracy: 0.8581 - val_loss: 0.4480 - val_accuracy: 0.8087 Epoch 50/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3311 - accuracy: 0.8632 - val_loss: 0.4534 - val_accuracy: 0.8110 Epoch 51/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3305 - accuracy: 0.8601 - val_loss: 0.4535 - val_accuracy: 0.8065 Epoch 52/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3286 - accuracy: 0.8632 - val_loss: 0.4541 - val_accuracy: 0.8065 Epoch 53/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3306 - accuracy: 0.8595 - val_loss: 0.4475 - val_accuracy: 0.8143 Epoch 54/100 239/239 [==============================] - 0s 998us/step - loss: 0.3255 - accuracy: 0.8651 - val_loss: 0.4553 - val_accuracy: 0.8132 Epoch 55/100 239/239 [==============================] - 0s 979us/step - loss: 0.3317 - accuracy: 0.8618 - val_loss: 0.4484 - val_accuracy: 0.8132 Epoch 56/100 239/239 [==============================] - 0s 943us/step - loss: 0.3244 - accuracy: 0.8626 - val_loss: 0.4515 - val_accuracy: 0.8110 Epoch 57/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3245 - accuracy: 0.8629 - val_loss: 0.4565 - val_accuracy: 0.8132 Epoch 58/100 239/239 [==============================] - 0s 969us/step - loss: 0.3248 - accuracy: 0.8643 - val_loss: 0.4658 - val_accuracy: 0.8076 Epoch 59/100 239/239 [==============================] - 0s 955us/step - loss: 0.3206 - accuracy: 0.8671 - val_loss: 0.4594 - val_accuracy: 0.8098 Epoch 60/100 239/239 [==============================] - 0s 952us/step - loss: 0.3203 - accuracy: 0.8629 - val_loss: 0.4644 - val_accuracy: 0.8098 Epoch 61/100 239/239 [==============================] - 0s 949us/step - loss: 0.3181 - accuracy: 0.8637 - val_loss: 0.4725 - val_accuracy: 0.8121 Epoch 62/100 239/239 [==============================] - 0s 928us/step - loss: 0.3231 - accuracy: 0.8651 - val_loss: 0.4740 - val_accuracy: 0.8098 Epoch 63/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3172 - accuracy: 0.8699 - val_loss: 0.4689 - val_accuracy: 0.8020 Epoch 64/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3172 - accuracy: 0.8640 - val_loss: 0.4619 - val_accuracy: 0.8031 Epoch 65/100 239/239 [==============================] - 0s 937us/step - loss: 0.3191 - accuracy: 0.8651 - val_loss: 0.4673 - val_accuracy: 0.8076 Epoch 66/100 239/239 [==============================] - 0s 955us/step - loss: 0.3160 - accuracy: 0.8671 - val_loss: 0.4655 - val_accuracy: 0.8076 Epoch 67/100 239/239 [==============================] - 0s 931us/step - loss: 0.3153 - accuracy: 0.8651 - val_loss: 0.4723 - val_accuracy: 0.8065 Epoch 68/100 239/239 [==============================] - 0s 925us/step - loss: 0.3103 - accuracy: 0.8685 - val_loss: 0.4741 - val_accuracy: 0.7998 Epoch 69/100 239/239 [==============================] - 0s 935us/step - loss: 0.3135 - accuracy: 0.8660 - val_loss: 0.4712 - val_accuracy: 0.8098 Epoch 70/100 239/239 [==============================] - 0s 942us/step - loss: 0.3163 - accuracy: 0.8646 - val_loss: 0.4649 - val_accuracy: 0.8087 Epoch 71/100 239/239 [==============================] - 0s 938us/step - loss: 0.3129 - accuracy: 0.8651 - val_loss: 0.4722 - val_accuracy: 0.8087 Epoch 72/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3106 - accuracy: 0.8707 - val_loss: 0.4777 - val_accuracy: 0.8031 Epoch 73/100 239/239 [==============================] - 0s 956us/step - loss: 0.3105 - accuracy: 0.8674 - val_loss: 0.4720 - val_accuracy: 0.8054 Epoch 74/100 239/239 [==============================] - 0s 962us/step - loss: 0.3074 - accuracy: 0.8671 - val_loss: 0.4809 - val_accuracy: 0.8076 Epoch 75/100 239/239 [==============================] - 0s 932us/step - loss: 0.3123 - accuracy: 0.8665 - val_loss: 0.4761 - val_accuracy: 0.8065 Epoch 76/100 239/239 [==============================] - 0s 951us/step - loss: 0.3079 - accuracy: 0.8705 - val_loss: 0.4905 - val_accuracy: 0.8054 Epoch 77/100 239/239 [==============================] - 0s 947us/step - loss: 0.3082 - accuracy: 0.8721 - val_loss: 0.4730 - val_accuracy: 0.8076 Epoch 78/100 239/239 [==============================] - 0s 948us/step - loss: 0.3102 - accuracy: 0.8682 - val_loss: 0.4773 - val_accuracy: 0.8009 Epoch 79/100 239/239 [==============================] - 0s 953us/step - loss: 0.3056 - accuracy: 0.8693 - val_loss: 0.4936 - val_accuracy: 0.7931 Epoch 80/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3049 - accuracy: 0.8721 - val_loss: 0.4965 - val_accuracy: 0.7964 Epoch 81/100 239/239 [==============================] - 0s 956us/step - loss: 0.3074 - accuracy: 0.8727 - val_loss: 0.4861 - val_accuracy: 0.7964 Epoch 82/100 239/239 [==============================] - 0s 938us/step - loss: 0.3046 - accuracy: 0.8688 - val_loss: 0.4900 - val_accuracy: 0.8043 Epoch 83/100 239/239 [==============================] - 0s 974us/step - loss: 0.2976 - accuracy: 0.8724 - val_loss: 0.4923 - val_accuracy: 0.8009 Epoch 84/100 239/239 [==============================] - 0s 929us/step - loss: 0.2998 - accuracy: 0.8777 - val_loss: 0.4922 - val_accuracy: 0.7975 Epoch 85/100 239/239 [==============================] - 0s 954us/step - loss: 0.3012 - accuracy: 0.8688 - val_loss: 0.4848 - val_accuracy: 0.7998 Epoch 86/100 239/239 [==============================] - 0s 938us/step - loss: 0.3001 - accuracy: 0.8719 - val_loss: 0.4842 - val_accuracy: 0.8043 Epoch 87/100 239/239 [==============================] - 0s 944us/step - loss: 0.3002 - accuracy: 0.8724 - val_loss: 0.4910 - val_accuracy: 0.8043 Epoch 88/100 239/239 [==============================] - 0s 942us/step - loss: 0.3048 - accuracy: 0.8721 - val_loss: 0.4902 - val_accuracy: 0.8054 Epoch 89/100 239/239 [==============================] - 0s 946us/step - loss: 0.2985 - accuracy: 0.8710 - val_loss: 0.4898 - val_accuracy: 0.8043 Epoch 90/100 239/239 [==============================] - 0s 973us/step - loss: 0.2987 - accuracy: 0.8733 - val_loss: 0.5010 - val_accuracy: 0.8054 Epoch 91/100 239/239 [==============================] - 0s 948us/step - loss: 0.3028 - accuracy: 0.8685 - val_loss: 0.4929 - val_accuracy: 0.7964 Epoch 92/100 239/239 [==============================] - 0s 933us/step - loss: 0.2975 - accuracy: 0.8716 - val_loss: 0.4918 - val_accuracy: 0.7998 Epoch 93/100 239/239 [==============================] - 0s 940us/step - loss: 0.2970 - accuracy: 0.8707 - val_loss: 0.4964 - val_accuracy: 0.7975 Epoch 94/100 239/239 [==============================] - 0s 960us/step - loss: 0.2983 - accuracy: 0.8719 - val_loss: 0.5005 - val_accuracy: 0.8009 Epoch 95/100 239/239 [==============================] - 0s 930us/step - loss: 0.2947 - accuracy: 0.8699 - val_loss: 0.5022 - val_accuracy: 0.8065 Epoch 96/100 239/239 [==============================] - 0s 968us/step - loss: 0.2899 - accuracy: 0.8752 - val_loss: 0.4968 - val_accuracy: 0.8043 Epoch 97/100 239/239 [==============================] - 0s 933us/step - loss: 0.2938 - accuracy: 0.8724 - val_loss: 0.4924 - val_accuracy: 0.8110 Epoch 98/100 239/239 [==============================] - 0s 929us/step - loss: 0.2903 - accuracy: 0.8738 - val_loss: 0.4956 - val_accuracy: 0.7998 Epoch 99/100 239/239 [==============================] - 0s 947us/step - loss: 0.2911 - accuracy: 0.8749 - val_loss: 0.5221 - val_accuracy: 0.7875 Epoch 100/100 239/239 [==============================] - 0s 957us/step - loss: 0.2873 - accuracy: 0.8802 - val_loss: 0.5233 - val_accuracy: 0.8043
plt.plot(history4.history['accuracy'])
plt.plot(history4.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
#Model #5
model_5 = Sequential()
model_5.add(Dense(units=32, input_dim=20, activation='relu'))
model_5.add(Dense(256, activation='tanh', input_shape=(7,)))
model_5.add(Dropout(0.1))
model_5.add(Dense(128, activation='tanh'))
model_5.add(Dropout(0.1))
model_5.add(Dense(64, activation='tanh'))
model_5.add(Dropout(0.1))
model_5.add(Dense(32, activation='tanh'))
model_5.add(Dense(1, activation='sigmoid'))
model_5.compile(loss = 'binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model_5.summary()
Model: "sequential_30"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_154 (Dense) (None, 32) 672
dense_155 (Dense) (None, 256) 8448
dropout_39 (Dropout) (None, 256) 0
dense_156 (Dense) (None, 128) 32896
dropout_40 (Dropout) (None, 128) 0
dense_157 (Dense) (None, 64) 8256
dropout_41 (Dropout) (None, 64) 0
dense_158 (Dense) (None, 32) 2080
dense_159 (Dense) (None, 1) 33
=================================================================
Total params: 52,385
Trainable params: 52,385
Non-trainable params: 0
_________________________________________________________________
#fitting the model
history5=model_5.fit(X_train,y_train,batch_size=15,epochs=100,validation_split=0.2)
Epoch 1/100 239/239 [==============================] - 1s 2ms/step - loss: 0.4872 - accuracy: 0.7753 - val_loss: 0.4845 - val_accuracy: 0.7819 Epoch 2/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4372 - accuracy: 0.8125 - val_loss: 0.4513 - val_accuracy: 0.8043 Epoch 3/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4107 - accuracy: 0.8251 - val_loss: 0.4710 - val_accuracy: 0.8098 Epoch 4/100 239/239 [==============================] - 0s 1ms/step - loss: 0.4008 - accuracy: 0.8304 - val_loss: 0.4361 - val_accuracy: 0.8076 Epoch 5/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3857 - accuracy: 0.8422 - val_loss: 0.4409 - val_accuracy: 0.8154 Epoch 6/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3810 - accuracy: 0.8380 - val_loss: 0.4600 - val_accuracy: 0.8076 Epoch 7/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3741 - accuracy: 0.8433 - val_loss: 0.4432 - val_accuracy: 0.8065 Epoch 8/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3696 - accuracy: 0.8511 - val_loss: 0.4361 - val_accuracy: 0.8199 Epoch 9/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3656 - accuracy: 0.8447 - val_loss: 0.4310 - val_accuracy: 0.8289 Epoch 10/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3559 - accuracy: 0.8470 - val_loss: 0.4620 - val_accuracy: 0.8098 Epoch 11/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3565 - accuracy: 0.8539 - val_loss: 0.4641 - val_accuracy: 0.8143 Epoch 12/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3559 - accuracy: 0.8470 - val_loss: 0.4459 - val_accuracy: 0.8121 Epoch 13/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3435 - accuracy: 0.8553 - val_loss: 0.4605 - val_accuracy: 0.8199 Epoch 14/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3412 - accuracy: 0.8598 - val_loss: 0.4477 - val_accuracy: 0.8177 Epoch 15/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3386 - accuracy: 0.8567 - val_loss: 0.4460 - val_accuracy: 0.8132 Epoch 16/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3260 - accuracy: 0.8640 - val_loss: 0.4513 - val_accuracy: 0.8255 Epoch 17/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3297 - accuracy: 0.8607 - val_loss: 0.4498 - val_accuracy: 0.8289 Epoch 18/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3221 - accuracy: 0.8649 - val_loss: 0.4686 - val_accuracy: 0.8043 Epoch 19/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3192 - accuracy: 0.8626 - val_loss: 0.4816 - val_accuracy: 0.8154 Epoch 20/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3142 - accuracy: 0.8674 - val_loss: 0.4705 - val_accuracy: 0.8110 Epoch 21/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3079 - accuracy: 0.8730 - val_loss: 0.4736 - val_accuracy: 0.8221 Epoch 22/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3026 - accuracy: 0.8702 - val_loss: 0.4872 - val_accuracy: 0.8221 Epoch 23/100 239/239 [==============================] - 0s 1ms/step - loss: 0.3047 - accuracy: 0.8744 - val_loss: 0.4958 - val_accuracy: 0.8031 Epoch 24/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2992 - accuracy: 0.8696 - val_loss: 0.4693 - val_accuracy: 0.7931 Epoch 25/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2938 - accuracy: 0.8800 - val_loss: 0.5061 - val_accuracy: 0.7942 Epoch 26/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2897 - accuracy: 0.8763 - val_loss: 0.4949 - val_accuracy: 0.8065 Epoch 27/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2824 - accuracy: 0.8772 - val_loss: 0.5054 - val_accuracy: 0.7975 Epoch 28/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2826 - accuracy: 0.8786 - val_loss: 0.5229 - val_accuracy: 0.7987 Epoch 29/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2708 - accuracy: 0.8842 - val_loss: 0.5268 - val_accuracy: 0.7864 Epoch 30/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2752 - accuracy: 0.8839 - val_loss: 0.5209 - val_accuracy: 0.7931 Epoch 31/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2685 - accuracy: 0.8822 - val_loss: 0.5255 - val_accuracy: 0.8031 Epoch 32/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2622 - accuracy: 0.8867 - val_loss: 0.5365 - val_accuracy: 0.8043 Epoch 33/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2542 - accuracy: 0.8898 - val_loss: 0.5419 - val_accuracy: 0.8098 Epoch 34/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2591 - accuracy: 0.8864 - val_loss: 0.5185 - val_accuracy: 0.8031 Epoch 35/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2526 - accuracy: 0.8917 - val_loss: 0.5460 - val_accuracy: 0.8110 Epoch 36/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2496 - accuracy: 0.8940 - val_loss: 0.5485 - val_accuracy: 0.7987 Epoch 37/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2378 - accuracy: 0.8998 - val_loss: 0.5518 - val_accuracy: 0.8043 Epoch 38/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2318 - accuracy: 0.8979 - val_loss: 0.5711 - val_accuracy: 0.7830 Epoch 39/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2360 - accuracy: 0.8940 - val_loss: 0.6045 - val_accuracy: 0.7841 Epoch 40/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2294 - accuracy: 0.9018 - val_loss: 0.5874 - val_accuracy: 0.7897 Epoch 41/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2238 - accuracy: 0.8993 - val_loss: 0.5898 - val_accuracy: 0.7864 Epoch 42/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2151 - accuracy: 0.9068 - val_loss: 0.5992 - val_accuracy: 0.8020 Epoch 43/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2114 - accuracy: 0.9082 - val_loss: 0.6198 - val_accuracy: 0.7718 Epoch 44/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2078 - accuracy: 0.9102 - val_loss: 0.6405 - val_accuracy: 0.8076 Epoch 45/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2081 - accuracy: 0.9135 - val_loss: 0.5964 - val_accuracy: 0.7987 Epoch 46/100 239/239 [==============================] - 0s 1ms/step - loss: 0.2032 - accuracy: 0.9102 - val_loss: 0.6645 - val_accuracy: 0.7864 Epoch 47/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1969 - accuracy: 0.9155 - val_loss: 0.6579 - val_accuracy: 0.7830 Epoch 48/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1944 - accuracy: 0.9194 - val_loss: 0.6365 - val_accuracy: 0.7707 Epoch 49/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1966 - accuracy: 0.9172 - val_loss: 0.6494 - val_accuracy: 0.7975 Epoch 50/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1975 - accuracy: 0.9141 - val_loss: 0.6513 - val_accuracy: 0.7852 Epoch 51/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1933 - accuracy: 0.9203 - val_loss: 0.6558 - val_accuracy: 0.7931 Epoch 52/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1852 - accuracy: 0.9194 - val_loss: 0.6768 - val_accuracy: 0.8009 Epoch 53/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1812 - accuracy: 0.9175 - val_loss: 0.6692 - val_accuracy: 0.7964 Epoch 54/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1721 - accuracy: 0.9242 - val_loss: 0.7161 - val_accuracy: 0.7852 Epoch 55/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1793 - accuracy: 0.9194 - val_loss: 0.6980 - val_accuracy: 0.7964 Epoch 56/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1676 - accuracy: 0.9287 - val_loss: 0.6916 - val_accuracy: 0.7808 Epoch 57/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1743 - accuracy: 0.9264 - val_loss: 0.7144 - val_accuracy: 0.7796 Epoch 58/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1725 - accuracy: 0.9219 - val_loss: 0.7044 - val_accuracy: 0.7707 Epoch 59/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1721 - accuracy: 0.9261 - val_loss: 0.7444 - val_accuracy: 0.7796 Epoch 60/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1552 - accuracy: 0.9317 - val_loss: 0.7429 - val_accuracy: 0.7852 Epoch 61/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1607 - accuracy: 0.9323 - val_loss: 0.7276 - val_accuracy: 0.7908 Epoch 62/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1518 - accuracy: 0.9365 - val_loss: 0.7630 - val_accuracy: 0.7651 Epoch 63/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1645 - accuracy: 0.9309 - val_loss: 0.7668 - val_accuracy: 0.7718 Epoch 64/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1538 - accuracy: 0.9362 - val_loss: 0.7580 - val_accuracy: 0.7897 Epoch 65/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1541 - accuracy: 0.9382 - val_loss: 0.7656 - val_accuracy: 0.7785 Epoch 66/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1490 - accuracy: 0.9382 - val_loss: 0.7800 - val_accuracy: 0.7774 Epoch 67/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1359 - accuracy: 0.9426 - val_loss: 0.8168 - val_accuracy: 0.7875 Epoch 68/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1381 - accuracy: 0.9432 - val_loss: 0.8380 - val_accuracy: 0.7651 Epoch 69/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1503 - accuracy: 0.9334 - val_loss: 0.8044 - val_accuracy: 0.7830 Epoch 70/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1336 - accuracy: 0.9468 - val_loss: 0.8201 - val_accuracy: 0.7864 Epoch 71/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1246 - accuracy: 0.9491 - val_loss: 0.7896 - val_accuracy: 0.7796 Epoch 72/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1366 - accuracy: 0.9407 - val_loss: 0.8125 - val_accuracy: 0.7864 Epoch 73/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1286 - accuracy: 0.9527 - val_loss: 0.8357 - val_accuracy: 0.7752 Epoch 74/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1249 - accuracy: 0.9510 - val_loss: 0.8471 - val_accuracy: 0.7752 Epoch 75/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1339 - accuracy: 0.9460 - val_loss: 0.8446 - val_accuracy: 0.7830 Epoch 76/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1223 - accuracy: 0.9510 - val_loss: 0.9223 - val_accuracy: 0.7707 Epoch 77/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1400 - accuracy: 0.9438 - val_loss: 0.8864 - val_accuracy: 0.7796 Epoch 78/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1335 - accuracy: 0.9454 - val_loss: 0.8425 - val_accuracy: 0.7763 Epoch 79/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1272 - accuracy: 0.9491 - val_loss: 0.8826 - val_accuracy: 0.7830 Epoch 80/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1227 - accuracy: 0.9524 - val_loss: 0.8839 - val_accuracy: 0.7617 Epoch 81/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1254 - accuracy: 0.9499 - val_loss: 0.8954 - val_accuracy: 0.7696 Epoch 82/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1077 - accuracy: 0.9580 - val_loss: 0.8919 - val_accuracy: 0.7841 Epoch 83/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1156 - accuracy: 0.9505 - val_loss: 0.8582 - val_accuracy: 0.7763 Epoch 84/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1148 - accuracy: 0.9544 - val_loss: 0.9057 - val_accuracy: 0.7673 Epoch 85/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1080 - accuracy: 0.9605 - val_loss: 0.9047 - val_accuracy: 0.7662 Epoch 86/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1077 - accuracy: 0.9575 - val_loss: 0.9070 - val_accuracy: 0.7864 Epoch 87/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1142 - accuracy: 0.9544 - val_loss: 0.9235 - val_accuracy: 0.7763 Epoch 88/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1045 - accuracy: 0.9572 - val_loss: 0.9416 - val_accuracy: 0.7651 Epoch 89/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1194 - accuracy: 0.9516 - val_loss: 0.9144 - val_accuracy: 0.7673 Epoch 90/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1074 - accuracy: 0.9558 - val_loss: 0.9050 - val_accuracy: 0.7796 Epoch 91/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1037 - accuracy: 0.9591 - val_loss: 0.9065 - val_accuracy: 0.7606 Epoch 92/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1054 - accuracy: 0.9597 - val_loss: 0.9297 - val_accuracy: 0.7707 Epoch 93/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1150 - accuracy: 0.9572 - val_loss: 0.9128 - val_accuracy: 0.7707 Epoch 94/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1014 - accuracy: 0.9591 - val_loss: 0.9375 - val_accuracy: 0.7908 Epoch 95/100 239/239 [==============================] - 0s 1ms/step - loss: 0.0988 - accuracy: 0.9633 - val_loss: 0.9347 - val_accuracy: 0.7763 Epoch 96/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1031 - accuracy: 0.9583 - val_loss: 0.9375 - val_accuracy: 0.7718 Epoch 97/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1014 - accuracy: 0.9580 - val_loss: 0.9682 - val_accuracy: 0.7808 Epoch 98/100 239/239 [==============================] - 0s 1ms/step - loss: 0.0940 - accuracy: 0.9622 - val_loss: 0.9857 - val_accuracy: 0.7763 Epoch 99/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1081 - accuracy: 0.9575 - val_loss: 1.0043 - val_accuracy: 0.7729 Epoch 100/100 239/239 [==============================] - 0s 1ms/step - loss: 0.1163 - accuracy: 0.9524 - val_loss: 0.9317 - val_accuracy: 0.7796
plt.plot(history5.history['accuracy'])
plt.plot(history5.history['val_accuracy'])
plt.title('Accuracy vs Epochs')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='lower right')
plt.show()
model_3.evaluate(X_test, y_test, verbose = 1)
test_pred = np.round(model_3.predict(X_test))
60/60 [==============================] - 0s 668us/step - loss: 0.4400 - accuracy: 0.8209 60/60 [==============================] - 0s 528us/step
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
print(classification_report(y_test, test_pred))
cm = confusion_matrix(y_test, test_pred)
plt.figure(figsize=(8,5))
sns.heatmap(cm, annot=True, fmt='.0f',xticklabels=['Not Exited', 'Exited'], yticklabels=['Not Exited', 'Exited'])
plt.ylabel('Actual')
plt.xlabel('Predicted')
plt.show()
precision recall f1-score support
0 0.84 0.95 0.89 1439
1 0.73 0.44 0.55 476
accuracy 0.82 1915
macro avg 0.79 0.69 0.72 1915
weighted avg 0.81 0.82 0.80 1915
Model 3 seems to preform the best
I have to keep the number of neuron down, because I noticed when I increased them it was causing inacuracies between the training and validation datasets
I also noticed the more hidden layers that were added the less the model learned, so I kept the layers low for model 3